diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_19.43.21 (1).png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_19.43.21 (1).png new file mode 100644 index 000000000..c7fb208e5 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_19.43.21 (1).png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_19.43.21.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_19.43.21.png new file mode 100644 index 000000000..c7fb208e5 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_19.43.21.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_20.37.09.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_20.37.09.png new file mode 100644 index 000000000..ca918d74f Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_20.37.09.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_22.44.44.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_22.44.44.png new file mode 100644 index 000000000..5d408ffa4 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_22.44.44.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_22.55.20.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_22.55.20.png new file mode 100644 index 000000000..009c0fce1 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_22.55.20.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.02.04.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.02.04.png new file mode 100644 index 000000000..a25646bc7 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.02.04.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.25.07.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.25.07.png new file mode 100644 index 000000000..a142f12dc Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.25.07.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.35.38.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.35.38.png new file mode 100644 index 000000000..bfa717806 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.35.38.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.41.03.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.41.03.png new file mode 100644 index 000000000..ce8257006 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.41.03.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.47.20.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.47.20.png new file mode 100644 index 000000000..b62838a80 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.47.20.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.48.53.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.48.53.png new file mode 100644 index 000000000..b6a51880a Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-02_23.48.53.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-03_08.42.10.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-03_08.42.10.png new file mode 100644 index 000000000..77f2c6784 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-03_08.42.10.png differ diff --git a/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-03_08.51.29.png b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-03_08.51.29.png new file mode 100644 index 000000000..e1be9e763 Binary files /dev/null and b/fa/.gitbook/assets/%E6%88%AA%E5%B1%8F2024-09-03_08.51.29.png differ diff --git a/fa/.gitbook/assets/%E7%94%BB%E6%9D%BF_1.png b/fa/.gitbook/assets/%E7%94%BB%E6%9D%BF_1.png new file mode 100644 index 000000000..1e08181c4 Binary files /dev/null and b/fa/.gitbook/assets/%E7%94%BB%E6%9D%BF_1.png differ diff --git a/fa/.gitbook/assets/000.png b/fa/.gitbook/assets/000.png new file mode 100644 index 000000000..87b8a434f Binary files /dev/null and b/fa/.gitbook/assets/000.png differ diff --git a/fa/.gitbook/assets/06f7c6ba-fbe0-4aeb-b7d4-fa1df0b07a5e.png b/fa/.gitbook/assets/06f7c6ba-fbe0-4aeb-b7d4-fa1df0b07a5e.png new file mode 100644 index 000000000..39bfdab68 Binary files /dev/null and b/fa/.gitbook/assets/06f7c6ba-fbe0-4aeb-b7d4-fa1df0b07a5e.png differ diff --git a/fa/.gitbook/assets/3.png b/fa/.gitbook/assets/3.png new file mode 100644 index 000000000..35d98ffce Binary files /dev/null and b/fa/.gitbook/assets/3.png differ diff --git a/fa/.gitbook/assets/4.png b/fa/.gitbook/assets/4.png new file mode 100644 index 000000000..23adb4c81 Binary files /dev/null and b/fa/.gitbook/assets/4.png differ diff --git a/fa/.gitbook/assets/7d5de1cce4426f70f448402d7812bd040d681c225e49a2de66b59cbde66ba834.png b/fa/.gitbook/assets/7d5de1cce4426f70f448402d7812bd040d681c225e49a2de66b59cbde66ba834.png new file mode 100644 index 000000000..64f56a338 Binary files /dev/null and b/fa/.gitbook/assets/7d5de1cce4426f70f448402d7812bd040d681c225e49a2de66b59cbde66ba834.png differ diff --git a/fa/.gitbook/assets/API Access.png b/fa/.gitbook/assets/API Access.png new file mode 100644 index 000000000..a992eb55e Binary files /dev/null and b/fa/.gitbook/assets/API Access.png differ diff --git a/fa/.gitbook/assets/Access to the Prompt Log (1).png b/fa/.gitbook/assets/Access to the Prompt Log (1).png new file mode 100644 index 000000000..6f9ed66c5 Binary files /dev/null and b/fa/.gitbook/assets/Access to the Prompt Log (1).png differ diff --git a/fa/.gitbook/assets/Access to the Prompt Log.png b/fa/.gitbook/assets/Access to the Prompt Log.png new file mode 100644 index 000000000..6f9ed66c5 Binary files /dev/null and b/fa/.gitbook/assets/Access to the Prompt Log.png differ diff --git a/fa/.gitbook/assets/CleanShot 2024-07-26 at 15.49.19@2x.png b/fa/.gitbook/assets/CleanShot 2024-07-26 at 15.49.19@2x.png new file mode 100644 index 000000000..7e3e1c5eb Binary files /dev/null and b/fa/.gitbook/assets/CleanShot 2024-07-26 at 15.49.19@2x.png differ diff --git a/fa/.gitbook/assets/CleanShot 2024-10-07 at 21.44.50@2x.png b/fa/.gitbook/assets/CleanShot 2024-10-07 at 21.44.50@2x.png new file mode 100644 index 000000000..751cd9dd3 Binary files /dev/null and b/fa/.gitbook/assets/CleanShot 2024-10-07 at 21.44.50@2x.png differ diff --git a/fa/.gitbook/assets/Context parameters.png b/fa/.gitbook/assets/Context parameters.png new file mode 100644 index 000000000..4412e432c Binary files /dev/null and b/fa/.gitbook/assets/Context parameters.png differ diff --git a/fa/.gitbook/assets/Dify-test.openapi.json b/fa/.gitbook/assets/Dify-test.openapi.json new file mode 100644 index 000000000..d6157d6c7 --- /dev/null +++ b/fa/.gitbook/assets/Dify-test.openapi.json @@ -0,0 +1,192 @@ +{ + "openapi": "3.0.1", + "info": { "title": "Dify-test", "description": "", "version": "1.0.0" }, + "tags": [], + "paths": { + "/retrieval": { + "post": { + "summary": "Knowledge Retrieval API", + "deprecated": false, + "description": "This API is used to connect to a knowledge base that is independent of the Dify and maintained by developers. For more details, please refer to [Connecting to an External Knowledge Base](https://docs.dify.ai/guides/knowledge-base/connect-external-knowledge-base). You can use API-Key in the Authorization HTTP Header to verify permissions, the authentication logic is defined by you in the retrieval API, as shown below:\n\n```text\nAuthorization: Bearer {API_KEY}\n```", + "tags": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "knowledge_id": { + "type": "string", + "description": "Your knowledge's unique ID" + }, + "query": { "type": "string", "description": "User's query" }, + "retrival_setting": { + "type": "object", + "properties": { + "top_k": { + "type": "integer", + "description": "Maximum number of retrieved results" + }, + "score_threshold": { + "type": "number", + "description": "The score limit of relevance of the result to the query, scope: 0~1", + "format": "float", + "minimum": 0, + "maximum": 1 + } + }, + "description": "Knowledge's retrieval parameters ", + "required": ["top_k", "score_threshold"] + } + }, + "required": ["knowledge_id", "query", "retrival_setting"] + }, + "example": { + "knowledge_id": "your-knowledge-id", + "query": "your question", + "retrival_setting": { "top_k": 2, "score_threshold": 0.5 } + } + } + } + }, + "responses": { + "200": { + "description": "If the action is successful, the service sends back an HTTP 200 response.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "records": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "Contains a chunk of text from a data source in the knowledge base." + }, + "score": { + "type": "number", + "format": "float", + "description": "The score of relevance of the result to the query, scope: 0~1" + }, + "title": { + "type": "string", + "description": "Document title" + }, + "metadata": { + "type": "string", + "description": "Contains metadata attributes and their values for the document in the data source." + } + }, + "title": "A list of records from querying the knowledge base.", + "required": ["content", "score", "title"] + } + }, + "required": ["records"] + }, + "examples": { + "1": { + "summary": "Success", + "value": { + "records": [ + { + "metadata": { + "path": "s3://dify/knowledge.txt", + "description": "dify knowledge document" + }, + "score": 0.98, + "title": "knowledge.txt", + "content": "This is the document for external knowledge." + }, + { + "metadata": { + "path": "s3://dify/introduce.txt", + "description": "dify introduce" + }, + "score": 0.66, + "title": "introduce.txt", + "content": "The Innovation Engine for GenAI Applications" + } + ] + } + } + } + } + }, + "headers": {} + }, + "403": { + "description": "The request is denied because of missing access permissions. Check your permissions and retry your request.", + "content": { + "application/json": { + "schema": { + "title": "", + "type": "object", + "properties": { + "error_code": { + "type": "integer", + "description": "error code" + }, + "error_msg": { + "type": "string", + "description": "The description of api exception" + } + }, + "required": ["error_code", "error_msg"] + }, + "examples": { + "1": { + "summary": "Erros", + "value": { + "error_code": 1001, + "error_msg": "Invalid Authorization header format. Expected 'Bearer ' format." + } + } + } + } + }, + "headers": {} + }, + "500": { + "description": "An internal server error occurred. Retry your request.", + "content": { + "application/json": { + "schema": { + "title": "", + "type": "object", + "properties": { + "error_code": { + "type": "integer", + "description": "error code" + }, + "error_msg": { + "type": "string", + "description": "The description of api exception" + } + }, + "required": ["error_code", "error_msg"] + }, + "examples": { + "1": { + "summary": "Erros", + "value": { + "error_code": 1001, + "error_msg": "Invalid Authorization header format. Expected 'Bearer ' format." + } + } + } + } + }, + "headers": {} + } + }, + "security": [{ "bearer": [] }] + } + } + }, + "components": { + "schemas": {}, + "securitySchemes": { "bearer": { "type": "http", "scheme": "bearer" } } + }, + "servers": [{ "url": "your-endpoint", "description": "测试环境" }] +} diff --git a/fa/.gitbook/assets/Feb 4, 2024 (1).png b/fa/.gitbook/assets/Feb 4, 2024 (1).png new file mode 100644 index 000000000..6a4446b42 Binary files /dev/null and b/fa/.gitbook/assets/Feb 4, 2024 (1).png differ diff --git a/fa/.gitbook/assets/Feb 4, 2024.png b/fa/.gitbook/assets/Feb 4, 2024.png new file mode 100644 index 000000000..6a4446b42 Binary files /dev/null and b/fa/.gitbook/assets/Feb 4, 2024.png differ diff --git a/fa/.gitbook/assets/Feb 4,2.png b/fa/.gitbook/assets/Feb 4,2.png new file mode 100644 index 000000000..d2bd2dbe9 Binary files /dev/null and b/fa/.gitbook/assets/Feb 4,2.png differ diff --git a/fa/.gitbook/assets/Q&A-pair.png b/fa/.gitbook/assets/Q&A-pair.png new file mode 100644 index 000000000..362d93824 Binary files /dev/null and b/fa/.gitbook/assets/Q&A-pair.png differ diff --git a/fa/.gitbook/assets/QUERY.png b/fa/.gitbook/assets/QUERY.png new file mode 100644 index 000000000..c8d8cf20b Binary files /dev/null and b/fa/.gitbook/assets/QUERY.png differ diff --git a/fa/.gitbook/assets/Retrieval-testing-setting.png b/fa/.gitbook/assets/Retrieval-testing-setting.png new file mode 100644 index 000000000..6df11184b Binary files /dev/null and b/fa/.gitbook/assets/Retrieval-testing-setting.png differ diff --git a/fa/.gitbook/assets/Retrieval-testing.png b/fa/.gitbook/assets/Retrieval-testing.png new file mode 100644 index 000000000..0ca7fcdcb Binary files /dev/null and b/fa/.gitbook/assets/Retrieval-testing.png differ diff --git a/fa/.gitbook/assets/Weather_search_tool (1).jpeg b/fa/.gitbook/assets/Weather_search_tool (1).jpeg new file mode 100644 index 000000000..dea5d9af7 Binary files /dev/null and b/fa/.gitbook/assets/Weather_search_tool (1).jpeg differ diff --git a/fa/.gitbook/assets/Weather_search_tool.jpeg b/fa/.gitbook/assets/Weather_search_tool.jpeg new file mode 100644 index 000000000..dea5d9af7 Binary files /dev/null and b/fa/.gitbook/assets/Weather_search_tool.jpeg differ diff --git a/fa/.gitbook/assets/WechatIMG157.jpg b/fa/.gitbook/assets/WechatIMG157.jpg new file mode 100644 index 000000000..3bf8f2613 Binary files /dev/null and b/fa/.gitbook/assets/WechatIMG157.jpg differ diff --git a/fa/.gitbook/assets/WechatIMG158.jpg b/fa/.gitbook/assets/WechatIMG158.jpg new file mode 100644 index 000000000..43352b460 Binary files /dev/null and b/fa/.gitbook/assets/WechatIMG158.jpg differ diff --git a/fa/.gitbook/assets/WechatIMG160.jpg b/fa/.gitbook/assets/WechatIMG160.jpg new file mode 100644 index 000000000..1acdc82ed Binary files /dev/null and b/fa/.gitbook/assets/WechatIMG160.jpg differ diff --git a/fa/.gitbook/assets/WechatIMG38.jpg b/fa/.gitbook/assets/WechatIMG38.jpg new file mode 100644 index 000000000..7aa8791e0 Binary files /dev/null and b/fa/.gitbook/assets/WechatIMG38.jpg differ diff --git a/fa/.gitbook/assets/add-a-chunk.png b/fa/.gitbook/assets/add-a-chunk.png new file mode 100644 index 000000000..b6c9f83d4 Binary files /dev/null and b/fa/.gitbook/assets/add-a-chunk.png differ diff --git a/fa/.gitbook/assets/add-annotation-reply.png b/fa/.gitbook/assets/add-annotation-reply.png new file mode 100644 index 000000000..501ce9aa1 Binary files /dev/null and b/fa/.gitbook/assets/add-annotation-reply.png differ diff --git a/fa/.gitbook/assets/add-new-segment.png b/fa/.gitbook/assets/add-new-segment.png new file mode 100644 index 000000000..5bf6e003e Binary files /dev/null and b/fa/.gitbook/assets/add-new-segment.png differ diff --git a/fa/.gitbook/assets/adjust-model-parameters.png b/fa/.gitbook/assets/adjust-model-parameters.png new file mode 100644 index 000000000..1130b066e Binary files /dev/null and b/fa/.gitbook/assets/adjust-model-parameters.png differ diff --git a/fa/.gitbook/assets/agent-dalle3.png b/fa/.gitbook/assets/agent-dalle3.png new file mode 100644 index 000000000..e2f45cb1b Binary files /dev/null and b/fa/.gitbook/assets/agent-dalle3.png differ diff --git a/fa/.gitbook/assets/ai-chatbot-embedded.png b/fa/.gitbook/assets/ai-chatbot-embedded.png new file mode 100644 index 000000000..95452e629 Binary files /dev/null and b/fa/.gitbook/assets/ai-chatbot-embedded.png differ diff --git a/fa/.gitbook/assets/ai-chatbot-knowledge-base.png b/fa/.gitbook/assets/ai-chatbot-knowledge-base.png new file mode 100644 index 000000000..a31f08bfc Binary files /dev/null and b/fa/.gitbook/assets/ai-chatbot-knowledge-base.png differ diff --git a/fa/.gitbook/assets/ai-using-tools-during-conversation.png b/fa/.gitbook/assets/ai-using-tools-during-conversation.png new file mode 100644 index 000000000..39e584b14 Binary files /dev/null and b/fa/.gitbook/assets/ai-using-tools-during-conversation.png differ diff --git a/fa/.gitbook/assets/annotaiton-reply.png b/fa/.gitbook/assets/annotaiton-reply.png new file mode 100644 index 000000000..905793628 Binary files /dev/null and b/fa/.gitbook/assets/annotaiton-reply.png differ diff --git a/fa/.gitbook/assets/annotated-replies-initial.png b/fa/.gitbook/assets/annotated-replies-initial.png new file mode 100644 index 000000000..d9661fc9a Binary files /dev/null and b/fa/.gitbook/assets/annotated-replies-initial.png differ diff --git a/fa/.gitbook/assets/annotated-replies.png b/fa/.gitbook/assets/annotated-replies.png new file mode 100644 index 000000000..0695c6d76 Binary files /dev/null and b/fa/.gitbook/assets/annotated-replies.png differ diff --git a/fa/.gitbook/assets/answer-img-1.png b/fa/.gitbook/assets/answer-img-1.png new file mode 100644 index 000000000..a2986bd36 Binary files /dev/null and b/fa/.gitbook/assets/answer-img-1.png differ diff --git a/fa/.gitbook/assets/answer-img-2.png b/fa/.gitbook/assets/answer-img-2.png new file mode 100644 index 000000000..83e5b26b4 Binary files /dev/null and b/fa/.gitbook/assets/answer-img-2.png differ diff --git a/fa/.gitbook/assets/answer-plain-text.png b/fa/.gitbook/assets/answer-plain-text.png new file mode 100644 index 000000000..07294e06b Binary files /dev/null and b/fa/.gitbook/assets/answer-plain-text.png differ diff --git a/fa/.gitbook/assets/api-reference.png b/fa/.gitbook/assets/api-reference.png new file mode 100644 index 000000000..5894112b9 Binary files /dev/null and b/fa/.gitbook/assets/api-reference.png differ diff --git a/fa/.gitbook/assets/api_based (1).png b/fa/.gitbook/assets/api_based (1).png new file mode 100644 index 000000000..18f235799 Binary files /dev/null and b/fa/.gitbook/assets/api_based (1).png differ diff --git a/fa/.gitbook/assets/api_based.png b/fa/.gitbook/assets/api_based.png new file mode 100644 index 000000000..18f235799 Binary files /dev/null and b/fa/.gitbook/assets/api_based.png differ diff --git a/fa/.gitbook/assets/api_based_extension1 (1).png b/fa/.gitbook/assets/api_based_extension1 (1).png new file mode 100644 index 000000000..62eb07602 Binary files /dev/null and b/fa/.gitbook/assets/api_based_extension1 (1).png differ diff --git a/fa/.gitbook/assets/api_based_extension1.png b/fa/.gitbook/assets/api_based_extension1.png new file mode 100644 index 000000000..62eb07602 Binary files /dev/null and b/fa/.gitbook/assets/api_based_extension1.png differ diff --git a/fa/.gitbook/assets/api_extension_edit (1).png b/fa/.gitbook/assets/api_extension_edit (1).png new file mode 100644 index 000000000..f030cb5e1 Binary files /dev/null and b/fa/.gitbook/assets/api_extension_edit (1).png differ diff --git a/fa/.gitbook/assets/api_extension_edit.png b/fa/.gitbook/assets/api_extension_edit.png new file mode 100644 index 000000000..f030cb5e1 Binary files /dev/null and b/fa/.gitbook/assets/api_extension_edit.png differ diff --git a/fa/.gitbook/assets/app-log.png b/fa/.gitbook/assets/app-log.png new file mode 100644 index 000000000..c066d219e Binary files /dev/null and b/fa/.gitbook/assets/app-log.png differ diff --git a/fa/.gitbook/assets/app-logs-ann.png b/fa/.gitbook/assets/app-logs-ann.png new file mode 100644 index 000000000..a953bd82f Binary files /dev/null and b/fa/.gitbook/assets/app-logs-ann.png differ diff --git a/fa/.gitbook/assets/app-pre-prompt-opening-remarks.png b/fa/.gitbook/assets/app-pre-prompt-opening-remarks.png new file mode 100644 index 000000000..35ca31aa9 Binary files /dev/null and b/fa/.gitbook/assets/app-pre-prompt-opening-remarks.png differ diff --git a/fa/.gitbook/assets/app-url.png b/fa/.gitbook/assets/app-url.png new file mode 100644 index 000000000..76ba6695c Binary files /dev/null and b/fa/.gitbook/assets/app-url.png differ diff --git a/fa/.gitbook/assets/app-variables.png b/fa/.gitbook/assets/app-variables.png new file mode 100644 index 000000000..ebd29640d Binary files /dev/null and b/fa/.gitbook/assets/app-variables.png differ diff --git a/fa/.gitbook/assets/app_toolkits_moderation4.png b/fa/.gitbook/assets/app_toolkits_moderation4.png new file mode 100644 index 000000000..90f535f8a Binary files /dev/null and b/fa/.gitbook/assets/app_toolkits_moderation4.png differ diff --git a/fa/.gitbook/assets/app_tools_edit (1).png b/fa/.gitbook/assets/app_tools_edit (1).png new file mode 100644 index 000000000..ecc056ed2 Binary files /dev/null and b/fa/.gitbook/assets/app_tools_edit (1).png differ diff --git a/fa/.gitbook/assets/app_tools_edit.png b/fa/.gitbook/assets/app_tools_edit.png new file mode 100644 index 000000000..ecc056ed2 Binary files /dev/null and b/fa/.gitbook/assets/app_tools_edit.png differ diff --git a/fa/.gitbook/assets/batch-run.png b/fa/.gitbook/assets/batch-run.png new file mode 100644 index 000000000..0e057eaae Binary files /dev/null and b/fa/.gitbook/assets/batch-run.png differ diff --git a/fa/.gitbook/assets/best-practice-add-html-iframe.png b/fa/.gitbook/assets/best-practice-add-html-iframe.png new file mode 100644 index 000000000..9788bbb31 Binary files /dev/null and b/fa/.gitbook/assets/best-practice-add-html-iframe.png differ diff --git a/fa/.gitbook/assets/best-practice-insert-dify-iframe-code.png b/fa/.gitbook/assets/best-practice-insert-dify-iframe-code.png new file mode 100644 index 000000000..f7dd940bb Binary files /dev/null and b/fa/.gitbook/assets/best-practice-insert-dify-iframe-code.png differ diff --git a/fa/.gitbook/assets/best-practice-json-schema-ui-example.png b/fa/.gitbook/assets/best-practice-json-schema-ui-example.png new file mode 100644 index 000000000..36d368466 Binary files /dev/null and b/fa/.gitbook/assets/best-practice-json-schema-ui-example.png differ diff --git a/fa/.gitbook/assets/best-practice-wix-2.png b/fa/.gitbook/assets/best-practice-wix-2.png new file mode 100644 index 000000000..a65820eb5 Binary files /dev/null and b/fa/.gitbook/assets/best-practice-wix-2.png differ diff --git a/fa/.gitbook/assets/best-practice-wix-3.png b/fa/.gitbook/assets/best-practice-wix-3.png new file mode 100644 index 000000000..80e0e46ad Binary files /dev/null and b/fa/.gitbook/assets/best-practice-wix-3.png differ diff --git a/fa/.gitbook/assets/binding-notion (1).png b/fa/.gitbook/assets/binding-notion (1).png new file mode 100644 index 000000000..13b9495c7 Binary files /dev/null and b/fa/.gitbook/assets/binding-notion (1).png differ diff --git a/fa/.gitbook/assets/binding-notion.png b/fa/.gitbook/assets/binding-notion.png new file mode 100644 index 000000000..63cd1e762 Binary files /dev/null and b/fa/.gitbook/assets/binding-notion.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-1.png b/fa/.gitbook/assets/build-ai-image-generation-app-1.png new file mode 100644 index 000000000..93d98e27b Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-1.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-10-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-10-en.png new file mode 100644 index 000000000..4705781db Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-10-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-11-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-11-en.png new file mode 100644 index 000000000..f20def73e Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-11-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-12-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-12-en.png new file mode 100644 index 000000000..09c0cc305 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-12-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-13-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-13-en.png new file mode 100644 index 000000000..6a828eaa6 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-13-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-14-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-14-en.png new file mode 100644 index 000000000..b98920f73 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-14-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-15-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-15-en.png new file mode 100644 index 000000000..7f52f86a2 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-15-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-16-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-16-en.png new file mode 100644 index 000000000..c6c893497 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-16-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-2-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-2-en.png new file mode 100644 index 000000000..4d98b75ca Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-2-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-3-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-3-en.png new file mode 100644 index 000000000..e1be9e763 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-3-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-4-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-4-en.png new file mode 100644 index 000000000..6194ad049 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-4-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-5-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-5-en.png new file mode 100644 index 000000000..86b53a589 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-5-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-6-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-6-en.png new file mode 100644 index 000000000..97c8f5b8b Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-6-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-7-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-7-en.png new file mode 100644 index 000000000..2a43fab54 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-7-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-8-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-8-en.png new file mode 100644 index 000000000..91d8d861c Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-8-en.png differ diff --git a/fa/.gitbook/assets/build-ai-image-generation-app-9-en.png b/fa/.gitbook/assets/build-ai-image-generation-app-9-en.png new file mode 100644 index 000000000..3604ea898 Binary files /dev/null and b/fa/.gitbook/assets/build-ai-image-generation-app-9-en.png differ diff --git a/fa/.gitbook/assets/bulk-add-custom-segment (1).png b/fa/.gitbook/assets/bulk-add-custom-segment (1).png new file mode 100644 index 000000000..f2f40d8a3 Binary files /dev/null and b/fa/.gitbook/assets/bulk-add-custom-segment (1).png differ diff --git a/fa/.gitbook/assets/bulk-add-custom-segment.png b/fa/.gitbook/assets/bulk-add-custom-segment.png new file mode 100644 index 000000000..e3648c1d3 Binary files /dev/null and b/fa/.gitbook/assets/bulk-add-custom-segment.png differ diff --git a/fa/.gitbook/assets/bulk-export-annotations.png b/fa/.gitbook/assets/bulk-export-annotations.png new file mode 100644 index 000000000..e09b93c3a Binary files /dev/null and b/fa/.gitbook/assets/bulk-export-annotations.png differ diff --git a/fa/.gitbook/assets/bulk-import-annotated.png b/fa/.gitbook/assets/bulk-import-annotated.png new file mode 100644 index 000000000..19e15f269 Binary files /dev/null and b/fa/.gitbook/assets/bulk-import-annotated.png differ diff --git a/fa/.gitbook/assets/chat-app.png b/fa/.gitbook/assets/chat-app.png new file mode 100644 index 000000000..f902f6b37 Binary files /dev/null and b/fa/.gitbook/assets/chat-app.png differ diff --git a/fa/.gitbook/assets/check-hosted-api.png b/fa/.gitbook/assets/check-hosted-api.png new file mode 100644 index 000000000..2f6c180ba Binary files /dev/null and b/fa/.gitbook/assets/check-hosted-api.png differ diff --git a/fa/.gitbook/assets/checklist.png b/fa/.gitbook/assets/checklist.png new file mode 100644 index 000000000..7f1dc514c Binary files /dev/null and b/fa/.gitbook/assets/checklist.png differ diff --git a/fa/.gitbook/assets/choice-model-in-app (1).png b/fa/.gitbook/assets/choice-model-in-app (1).png new file mode 100644 index 000000000..02b7704fb Binary files /dev/null and b/fa/.gitbook/assets/choice-model-in-app (1).png differ diff --git a/fa/.gitbook/assets/choice-model-in-app.png b/fa/.gitbook/assets/choice-model-in-app.png new file mode 100644 index 000000000..02b7704fb Binary files /dev/null and b/fa/.gitbook/assets/choice-model-in-app.png differ diff --git a/fa/.gitbook/assets/citation-and-attribution.png b/fa/.gitbook/assets/citation-and-attribution.png new file mode 100644 index 000000000..7b0bcb4b6 Binary files /dev/null and b/fa/.gitbook/assets/citation-and-attribution.png differ diff --git a/fa/.gitbook/assets/compose-the-app.png b/fa/.gitbook/assets/compose-the-app.png new file mode 100644 index 000000000..a178b2643 Binary files /dev/null and b/fa/.gitbook/assets/compose-the-app.png differ diff --git a/fa/.gitbook/assets/config-langfuse.png b/fa/.gitbook/assets/config-langfuse.png new file mode 100644 index 000000000..ffb4e5d6f Binary files /dev/null and b/fa/.gitbook/assets/config-langfuse.png differ diff --git a/fa/.gitbook/assets/config-langsmith.png b/fa/.gitbook/assets/config-langsmith.png new file mode 100644 index 000000000..de44ff4b2 Binary files /dev/null and b/fa/.gitbook/assets/config-langsmith.png differ diff --git a/fa/.gitbook/assets/configure-first-party-tool-api.png b/fa/.gitbook/assets/configure-first-party-tool-api.png new file mode 100644 index 000000000..029dd98f0 Binary files /dev/null and b/fa/.gitbook/assets/configure-first-party-tool-api.png differ diff --git a/fa/.gitbook/assets/connect-with-notion-1.png b/fa/.gitbook/assets/connect-with-notion-1.png new file mode 100644 index 000000000..534338d22 Binary files /dev/null and b/fa/.gitbook/assets/connect-with-notion-1.png differ diff --git a/fa/.gitbook/assets/connect-with-notion-2.png b/fa/.gitbook/assets/connect-with-notion-2.png new file mode 100644 index 000000000..1768b6fba Binary files /dev/null and b/fa/.gitbook/assets/connect-with-notion-2.png differ diff --git a/fa/.gitbook/assets/connect-with-notion-3.png b/fa/.gitbook/assets/connect-with-notion-3.png new file mode 100644 index 000000000..35478ba3d Binary files /dev/null and b/fa/.gitbook/assets/connect-with-notion-3.png differ diff --git a/fa/.gitbook/assets/connect-with-notion-4.png b/fa/.gitbook/assets/connect-with-notion-4.png new file mode 100644 index 000000000..67cf792fd Binary files /dev/null and b/fa/.gitbook/assets/connect-with-notion-4.png differ diff --git a/fa/.gitbook/assets/content-moderation-settings-openai.png b/fa/.gitbook/assets/content-moderation-settings-openai.png new file mode 100644 index 000000000..eae59b6d4 Binary files /dev/null and b/fa/.gitbook/assets/content-moderation-settings-openai.png differ diff --git a/fa/.gitbook/assets/content-moderation.png b/fa/.gitbook/assets/content-moderation.png new file mode 100644 index 000000000..5f2423fb2 Binary files /dev/null and b/fa/.gitbook/assets/content-moderation.png differ diff --git a/fa/.gitbook/assets/content_moderation (1).png b/fa/.gitbook/assets/content_moderation (1).png new file mode 100644 index 000000000..1d271097e Binary files /dev/null and b/fa/.gitbook/assets/content_moderation (1).png differ diff --git a/fa/.gitbook/assets/content_moderation.png b/fa/.gitbook/assets/content_moderation.png new file mode 100644 index 000000000..21271694d Binary files /dev/null and b/fa/.gitbook/assets/content_moderation.png differ diff --git a/fa/.gitbook/assets/conversation-chatbot-2.png b/fa/.gitbook/assets/conversation-chatbot-2.png new file mode 100644 index 000000000..cd42bee7b Binary files /dev/null and b/fa/.gitbook/assets/conversation-chatbot-2.png differ diff --git a/fa/.gitbook/assets/conversation-chatbot.png b/fa/.gitbook/assets/conversation-chatbot.png new file mode 100644 index 000000000..d126c3a38 Binary files /dev/null and b/fa/.gitbook/assets/conversation-chatbot.png differ diff --git a/fa/.gitbook/assets/conversation-follow-up.png b/fa/.gitbook/assets/conversation-follow-up.png new file mode 100644 index 000000000..172053a1a Binary files /dev/null and b/fa/.gitbook/assets/conversation-follow-up.png differ diff --git a/fa/.gitbook/assets/conversation-logs.png b/fa/.gitbook/assets/conversation-logs.png new file mode 100644 index 000000000..0577f67aa Binary files /dev/null and b/fa/.gitbook/assets/conversation-logs.png differ diff --git a/fa/.gitbook/assets/conversation-opener.png b/fa/.gitbook/assets/conversation-opener.png new file mode 100644 index 000000000..129faae94 Binary files /dev/null and b/fa/.gitbook/assets/conversation-opener.png differ diff --git a/fa/.gitbook/assets/conversation-options.png b/fa/.gitbook/assets/conversation-options.png new file mode 100644 index 000000000..76be3634e Binary files /dev/null and b/fa/.gitbook/assets/conversation-options.png differ diff --git a/fa/.gitbook/assets/conversation-remarkers.png b/fa/.gitbook/assets/conversation-remarkers.png new file mode 100644 index 000000000..0b7efe92c Binary files /dev/null and b/fa/.gitbook/assets/conversation-remarkers.png differ diff --git a/fa/.gitbook/assets/conversation-var-scenario-1.png b/fa/.gitbook/assets/conversation-var-scenario-1.png new file mode 100644 index 000000000..e3da7a3c2 Binary files /dev/null and b/fa/.gitbook/assets/conversation-var-scenario-1.png differ diff --git a/fa/.gitbook/assets/conversation-var-scenario-2-1.png b/fa/.gitbook/assets/conversation-var-scenario-2-1.png new file mode 100644 index 000000000..11a59fb7f Binary files /dev/null and b/fa/.gitbook/assets/conversation-var-scenario-2-1.png differ diff --git a/fa/.gitbook/assets/conversation-var-scenario-2.png b/fa/.gitbook/assets/conversation-var-scenario-2.png new file mode 100644 index 000000000..bb7664489 Binary files /dev/null and b/fa/.gitbook/assets/conversation-var-scenario-2.png differ diff --git a/fa/.gitbook/assets/conversation-var.png b/fa/.gitbook/assets/conversation-var.png new file mode 100644 index 000000000..ce334a339 Binary files /dev/null and b/fa/.gitbook/assets/conversation-var.png differ diff --git a/fa/.gitbook/assets/conversation-variables-scenario-1.png b/fa/.gitbook/assets/conversation-variables-scenario-1.png new file mode 100644 index 000000000..cd7b8578a Binary files /dev/null and b/fa/.gitbook/assets/conversation-variables-scenario-1.png differ diff --git a/fa/.gitbook/assets/convert-chapter-content.png b/fa/.gitbook/assets/convert-chapter-content.png new file mode 100644 index 000000000..7b3f922d2 Binary files /dev/null and b/fa/.gitbook/assets/convert-chapter-content.png differ diff --git a/fa/.gitbook/assets/create a new App.png b/fa/.gitbook/assets/create a new App.png new file mode 100644 index 000000000..fc0cd42fe Binary files /dev/null and b/fa/.gitbook/assets/create a new App.png differ diff --git a/fa/.gitbook/assets/create-an-app.png b/fa/.gitbook/assets/create-an-app.png new file mode 100644 index 000000000..aec94cd7f Binary files /dev/null and b/fa/.gitbook/assets/create-an-app.png differ diff --git a/fa/.gitbook/assets/create-app (1).png b/fa/.gitbook/assets/create-app (1).png new file mode 100644 index 000000000..c11dbeffc Binary files /dev/null and b/fa/.gitbook/assets/create-app (1).png differ diff --git a/fa/.gitbook/assets/create-app (2).png b/fa/.gitbook/assets/create-app (2).png new file mode 100644 index 000000000..8f5c28cef Binary files /dev/null and b/fa/.gitbook/assets/create-app (2).png differ diff --git a/fa/.gitbook/assets/create-app (3).png b/fa/.gitbook/assets/create-app (3).png new file mode 100644 index 000000000..23f495506 Binary files /dev/null and b/fa/.gitbook/assets/create-app (3).png differ diff --git a/fa/.gitbook/assets/create-app-1.png b/fa/.gitbook/assets/create-app-1.png new file mode 100644 index 000000000..45bd72a2d Binary files /dev/null and b/fa/.gitbook/assets/create-app-1.png differ diff --git a/fa/.gitbook/assets/create-app-2.png b/fa/.gitbook/assets/create-app-2.png new file mode 100644 index 000000000..c892fb44a Binary files /dev/null and b/fa/.gitbook/assets/create-app-2.png differ diff --git a/fa/.gitbook/assets/create-app-5.png b/fa/.gitbook/assets/create-app-5.png new file mode 100644 index 000000000..88cb56277 Binary files /dev/null and b/fa/.gitbook/assets/create-app-5.png differ diff --git a/fa/.gitbook/assets/create-app.png b/fa/.gitbook/assets/create-app.png new file mode 100644 index 000000000..8f5c28cef Binary files /dev/null and b/fa/.gitbook/assets/create-app.png differ diff --git a/fa/.gitbook/assets/create-from-blank.png b/fa/.gitbook/assets/create-from-blank.png new file mode 100644 index 000000000..0581d7651 Binary files /dev/null and b/fa/.gitbook/assets/create-from-blank.png differ diff --git a/fa/.gitbook/assets/create-knowledge-2.png b/fa/.gitbook/assets/create-knowledge-2.png new file mode 100644 index 000000000..95de7920c Binary files /dev/null and b/fa/.gitbook/assets/create-knowledge-2.png differ diff --git a/fa/.gitbook/assets/create-knowledge-base-2.png b/fa/.gitbook/assets/create-knowledge-base-2.png new file mode 100644 index 000000000..107e5c613 Binary files /dev/null and b/fa/.gitbook/assets/create-knowledge-base-2.png differ diff --git a/fa/.gitbook/assets/create-knowledge.png b/fa/.gitbook/assets/create-knowledge.png new file mode 100644 index 000000000..8de9508d3 Binary files /dev/null and b/fa/.gitbook/assets/create-knowledge.png differ diff --git a/fa/.gitbook/assets/create-model.png b/fa/.gitbook/assets/create-model.png new file mode 100644 index 000000000..87560cebe Binary files /dev/null and b/fa/.gitbook/assets/create-model.png differ diff --git a/fa/.gitbook/assets/custom-chunk-settings.png b/fa/.gitbook/assets/custom-chunk-settings.png new file mode 100644 index 000000000..54dd62e14 Binary files /dev/null and b/fa/.gitbook/assets/custom-chunk-settings.png differ diff --git a/fa/.gitbook/assets/customer-feedback-classification.png b/fa/.gitbook/assets/customer-feedback-classification.png new file mode 100644 index 000000000..de34929b7 Binary files /dev/null and b/fa/.gitbook/assets/customer-feedback-classification.png differ diff --git a/fa/.gitbook/assets/customizable-model.png b/fa/.gitbook/assets/customizable-model.png new file mode 100644 index 000000000..f106854a2 Binary files /dev/null and b/fa/.gitbook/assets/customizable-model.png differ diff --git a/fa/.gitbook/assets/dataset-api-token (1).png b/fa/.gitbook/assets/dataset-api-token (1).png new file mode 100644 index 000000000..5aa2274af Binary files /dev/null and b/fa/.gitbook/assets/dataset-api-token (1).png differ diff --git a/fa/.gitbook/assets/dataset-api-token.png b/fa/.gitbook/assets/dataset-api-token.png new file mode 100644 index 000000000..5aa2274af Binary files /dev/null and b/fa/.gitbook/assets/dataset-api-token.png differ diff --git a/fa/.gitbook/assets/debug-ai-chatbot-publish.png b/fa/.gitbook/assets/debug-ai-chatbot-publish.png new file mode 100644 index 000000000..c5f55d129 Binary files /dev/null and b/fa/.gitbook/assets/debug-ai-chatbot-publish.png differ diff --git a/fa/.gitbook/assets/debug-app-in-dify.png b/fa/.gitbook/assets/debug-app-in-dify.png new file mode 100644 index 000000000..886dcc5ee Binary files /dev/null and b/fa/.gitbook/assets/debug-app-in-dify.png differ diff --git a/fa/.gitbook/assets/debug.png b/fa/.gitbook/assets/debug.png new file mode 100644 index 000000000..fd78cc37b Binary files /dev/null and b/fa/.gitbook/assets/debug.png differ diff --git a/fa/.gitbook/assets/deploy-model.png b/fa/.gitbook/assets/deploy-model.png new file mode 100644 index 000000000..043610dd2 Binary files /dev/null and b/fa/.gitbook/assets/deploy-model.png differ diff --git a/fa/.gitbook/assets/docs-1.png b/fa/.gitbook/assets/docs-1.png new file mode 100644 index 000000000..1f090173d Binary files /dev/null and b/fa/.gitbook/assets/docs-1.png differ diff --git a/fa/.gitbook/assets/docs-10.png b/fa/.gitbook/assets/docs-10.png new file mode 100644 index 000000000..b732e8e50 Binary files /dev/null and b/fa/.gitbook/assets/docs-10.png differ diff --git a/fa/.gitbook/assets/docs-2.png b/fa/.gitbook/assets/docs-2.png new file mode 100644 index 000000000..291c5dbde Binary files /dev/null and b/fa/.gitbook/assets/docs-2.png differ diff --git a/fa/.gitbook/assets/docs-3.png b/fa/.gitbook/assets/docs-3.png new file mode 100644 index 000000000..c313ff635 Binary files /dev/null and b/fa/.gitbook/assets/docs-3.png differ diff --git a/fa/.gitbook/assets/docs-4.png b/fa/.gitbook/assets/docs-4.png new file mode 100644 index 000000000..0a8776616 Binary files /dev/null and b/fa/.gitbook/assets/docs-4.png differ diff --git a/fa/.gitbook/assets/docs-5.png b/fa/.gitbook/assets/docs-5.png new file mode 100644 index 000000000..83fe34ad8 Binary files /dev/null and b/fa/.gitbook/assets/docs-5.png differ diff --git a/fa/.gitbook/assets/docs-6.png b/fa/.gitbook/assets/docs-6.png new file mode 100644 index 000000000..54efcd596 Binary files /dev/null and b/fa/.gitbook/assets/docs-6.png differ diff --git a/fa/.gitbook/assets/docs-8.png b/fa/.gitbook/assets/docs-8.png new file mode 100644 index 000000000..75ff14519 Binary files /dev/null and b/fa/.gitbook/assets/docs-8.png differ diff --git a/fa/.gitbook/assets/docs-9.png b/fa/.gitbook/assets/docs-9.png new file mode 100644 index 000000000..64181d5b2 Binary files /dev/null and b/fa/.gitbook/assets/docs-9.png differ diff --git a/fa/.gitbook/assets/docs-contribution.png b/fa/.gitbook/assets/docs-contribution.png new file mode 100644 index 000000000..6b4800530 Binary files /dev/null and b/fa/.gitbook/assets/docs-contribution.png differ diff --git a/fa/.gitbook/assets/edit-segment (1).png b/fa/.gitbook/assets/edit-segment (1).png new file mode 100644 index 000000000..ea3f68014 Binary files /dev/null and b/fa/.gitbook/assets/edit-segment (1).png differ diff --git a/fa/.gitbook/assets/edit-segment.png b/fa/.gitbook/assets/edit-segment.png new file mode 100644 index 000000000..96e141f54 Binary files /dev/null and b/fa/.gitbook/assets/edit-segment.png differ diff --git a/fa/.gitbook/assets/editing-annotated-replies.png b/fa/.gitbook/assets/editing-annotated-replies.png new file mode 100644 index 000000000..ce68714f1 Binary files /dev/null and b/fa/.gitbook/assets/editing-annotated-replies.png differ diff --git a/fa/.gitbook/assets/en-env-variable.png b/fa/.gitbook/assets/en-env-variable.png new file mode 100644 index 000000000..17ff11265 Binary files /dev/null and b/fa/.gitbook/assets/en-env-variable.png differ diff --git a/fa/.gitbook/assets/en-import-dsl-file-via-url.png b/fa/.gitbook/assets/en-import-dsl-file-via-url.png new file mode 100644 index 000000000..661c9405d Binary files /dev/null and b/fa/.gitbook/assets/en-import-dsl-file-via-url.png differ diff --git a/fa/.gitbook/assets/en-import-dsl-file.png b/fa/.gitbook/assets/en-import-dsl-file.png new file mode 100644 index 000000000..fc9cfacc4 Binary files /dev/null and b/fa/.gitbook/assets/en-import-dsl-file.png differ diff --git a/fa/.gitbook/assets/en-knowledge-add-document.png b/fa/.gitbook/assets/en-knowledge-add-document.png new file mode 100644 index 000000000..29bdcbb3e Binary files /dev/null and b/fa/.gitbook/assets/en-knowledge-add-document.png differ diff --git a/fa/.gitbook/assets/en-n-to-1.png b/fa/.gitbook/assets/en-n-to-1.png new file mode 100644 index 000000000..e3f7ac671 Binary files /dev/null and b/fa/.gitbook/assets/en-n-to-1.png differ diff --git a/fa/.gitbook/assets/en-prompt-generator.png b/fa/.gitbook/assets/en-prompt-generator.png new file mode 100644 index 000000000..362751a18 Binary files /dev/null and b/fa/.gitbook/assets/en-prompt-generator.png differ diff --git a/fa/.gitbook/assets/en-public-web-app.png b/fa/.gitbook/assets/en-public-web-app.png new file mode 100644 index 000000000..70048539b Binary files /dev/null and b/fa/.gitbook/assets/en-public-web-app.png differ diff --git a/fa/.gitbook/assets/en-rag-multiple.png b/fa/.gitbook/assets/en-rag-multiple.png new file mode 100644 index 000000000..b8814601a Binary files /dev/null and b/fa/.gitbook/assets/en-rag-multiple.png differ diff --git a/fa/.gitbook/assets/en-rerank-cohere.png b/fa/.gitbook/assets/en-rerank-cohere.png new file mode 100644 index 000000000..0b06649bb Binary files /dev/null and b/fa/.gitbook/assets/en-rerank-cohere.png differ diff --git a/fa/.gitbook/assets/en-rerank-explore.png b/fa/.gitbook/assets/en-rerank-explore.png new file mode 100644 index 000000000..59bb5e007 Binary files /dev/null and b/fa/.gitbook/assets/en-rerank-explore.png differ diff --git a/fa/.gitbook/assets/en-rerank-model-api.png b/fa/.gitbook/assets/en-rerank-model-api.png new file mode 100644 index 000000000..27214709e Binary files /dev/null and b/fa/.gitbook/assets/en-rerank-model-api.png differ diff --git a/fa/.gitbook/assets/en-rerank-setting.png b/fa/.gitbook/assets/en-rerank-setting.png new file mode 100644 index 000000000..5c87408d1 Binary files /dev/null and b/fa/.gitbook/assets/en-rerank-setting.png differ diff --git a/fa/.gitbook/assets/en-variables.png b/fa/.gitbook/assets/en-variables.png new file mode 100644 index 000000000..ebcceb542 Binary files /dev/null and b/fa/.gitbook/assets/en-variables.png differ diff --git a/fa/.gitbook/assets/en-web-app-settings.png b/fa/.gitbook/assets/en-web-app-settings.png new file mode 100644 index 000000000..04b5f8cd9 Binary files /dev/null and b/fa/.gitbook/assets/en-web-app-settings.png differ diff --git a/fa/.gitbook/assets/enable-citation-attribution.png b/fa/.gitbook/assets/enable-citation-attribution.png new file mode 100644 index 000000000..7314bb177 Binary files /dev/null and b/fa/.gitbook/assets/enable-citation-attribution.png differ diff --git a/fa/.gitbook/assets/end-answer.png b/fa/.gitbook/assets/end-answer.png new file mode 100644 index 000000000..9d99907b1 Binary files /dev/null and b/fa/.gitbook/assets/end-answer.png differ diff --git a/fa/.gitbook/assets/endpoint-url-2.png b/fa/.gitbook/assets/endpoint-url-2.png new file mode 100644 index 000000000..fd97348ae Binary files /dev/null and b/fa/.gitbook/assets/endpoint-url-2.png differ diff --git a/fa/.gitbook/assets/endpoint-url.png b/fa/.gitbook/assets/endpoint-url.png new file mode 100644 index 000000000..12f51f4e5 Binary files /dev/null and b/fa/.gitbook/assets/endpoint-url.png differ diff --git a/fa/.gitbook/assets/explore-apps-by-dify.png b/fa/.gitbook/assets/explore-apps-by-dify.png new file mode 100644 index 000000000..21b025e84 Binary files /dev/null and b/fa/.gitbook/assets/explore-apps-by-dify.png differ diff --git a/fa/.gitbook/assets/export-dsl-secret.png b/fa/.gitbook/assets/export-dsl-secret.png new file mode 100644 index 000000000..1d249e279 Binary files /dev/null and b/fa/.gitbook/assets/export-dsl-secret.png differ diff --git a/fa/.gitbook/assets/export-dsl.png b/fa/.gitbook/assets/export-dsl.png new file mode 100644 index 000000000..0e8339986 Binary files /dev/null and b/fa/.gitbook/assets/export-dsl.png differ diff --git a/fa/.gitbook/assets/first-party-tools.png b/fa/.gitbook/assets/first-party-tools.png new file mode 100644 index 000000000..dd81c9a8a Binary files /dev/null and b/fa/.gitbook/assets/first-party-tools.png differ diff --git a/fa/.gitbook/assets/full-text-search.png b/fa/.gitbook/assets/full-text-search.png new file mode 100644 index 000000000..f8ca63423 Binary files /dev/null and b/fa/.gitbook/assets/full-text-search.png differ diff --git a/fa/.gitbook/assets/get-model-name.png b/fa/.gitbook/assets/get-model-name.png new file mode 100644 index 000000000..da33fb3d0 Binary files /dev/null and b/fa/.gitbook/assets/get-model-name.png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/API Access.png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/API Access.png new file mode 100644 index 000000000..a992eb55e Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/API Access.png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (26).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (26).png new file mode 100644 index 000000000..b06128fd7 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (26).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (47).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (47).png new file mode 100644 index 000000000..c0c72136c Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (47).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (51).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (51).png new file mode 100644 index 000000000..c16201b59 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (51).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (63).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (63).png new file mode 100644 index 000000000..640e5aa11 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (63).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (77).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (77).png new file mode 100644 index 000000000..0ca666dba Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (77).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (79).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (79).png new file mode 100644 index 000000000..a06e6bc8f Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (79).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (94).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (94).png new file mode 100644 index 000000000..c78be695c Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/conversation-application/image (94).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/image (244).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/image (244).png new file mode 100644 index 000000000..d6fc2f6f8 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/image (244).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (36).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (36).png new file mode 100644 index 000000000..c24e33de9 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (36).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (39).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (39).png new file mode 100644 index 000000000..b4e0be6fc Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (39).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (57).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (57).png new file mode 100644 index 000000000..43831ce88 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (57).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (58).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (58).png new file mode 100644 index 000000000..57664b773 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (58).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (70).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (70).png new file mode 100644 index 000000000..0e0787903 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (70).png differ diff --git a/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (73).png b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (73).png new file mode 100644 index 000000000..0e46b7bb1 Binary files /dev/null and b/fa/.gitbook/assets/guides/application-publishing/launch-your-webapp-quickly/text-generator/image (73).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-1.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-1.png new file mode 100644 index 000000000..1f090173d Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-1.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-10.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-10.png new file mode 100644 index 000000000..b732e8e50 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-10.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-2.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-2.png new file mode 100644 index 000000000..291c5dbde Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-2.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-3.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-3.png new file mode 100644 index 000000000..c313ff635 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-3.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-4.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-4.png new file mode 100644 index 000000000..0a8776616 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-4.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-5.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-5.png new file mode 100644 index 000000000..83fe34ad8 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-5.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-6.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-6.png new file mode 100644 index 000000000..54efcd596 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-6.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-8.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-8.png new file mode 100644 index 000000000..75ff14519 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-8.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-9.png b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-9.png new file mode 100644 index 000000000..64181d5b2 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/agent/docs-9.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/content_moderation.png b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/content_moderation.png new file mode 100644 index 000000000..21271694d Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/content_moderation.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (237).png b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (237).png new file mode 100644 index 000000000..762cd662e Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (237).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (240).png b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (240).png new file mode 100644 index 000000000..c25712c41 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (240).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (241).png b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (241).png new file mode 100644 index 000000000..f477dc5cb Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/image (241).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation2.png b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation2.png new file mode 100644 index 000000000..26819fdd3 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation2.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation3.png b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation3.png new file mode 100644 index 000000000..82092ad53 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation3.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation4.png b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation4.png new file mode 100644 index 000000000..5c997a663 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/app_toolkits/moderation4.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (10) (1).png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (10) (1).png new file mode 100644 index 000000000..c422797fa Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (10) (1).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (108).png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (108).png new file mode 100644 index 000000000..27452ba02 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (108).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (245).png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (245).png new file mode 100644 index 000000000..de96ae06b Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (245).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (28).png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (28).png new file mode 100644 index 000000000..165d029b7 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (28).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (54).png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (54).png new file mode 100644 index 000000000..a945f99a4 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (54).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (67).png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (67).png new file mode 100644 index 000000000..7630887e9 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (67).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (76).png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (76).png new file mode 100644 index 000000000..87d1a9ffc Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image (76).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image.png b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image.png new file mode 100644 index 000000000..122307122 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/conversation-application/image.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/create a new App.png b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/create a new App.png new file mode 100644 index 000000000..fc0cd42fe Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/create a new App.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (167).png b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (167).png new file mode 100644 index 000000000..9bc76cc20 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (167).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (168).png b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (168).png new file mode 100644 index 000000000..7e67a52e6 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (168).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (169).png b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (169).png new file mode 100644 index 000000000..0ae35e2ce Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (169).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (170).png b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (170).png new file mode 100644 index 000000000..b4d7d1f14 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (170).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (172).png b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (172).png new file mode 100644 index 000000000..60d6ce87d Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/creating-an-application/image (172).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/000.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/000.png new file mode 100644 index 000000000..87b8a434f Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/000.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Access to the Prompt Log (1) (1).png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Access to the Prompt Log (1) (1).png new file mode 100644 index 000000000..6f9ed66c5 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Access to the Prompt Log (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Access to the Prompt Log (1).png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Access to the Prompt Log (1).png new file mode 100644 index 000000000..6f9ed66c5 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Access to the Prompt Log (1).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Context parameters.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Context parameters.png new file mode 100644 index 000000000..4412e432c Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Context parameters.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Context.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Context.png new file mode 100644 index 000000000..d12d84455 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/Context.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/QUERY.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/QUERY.png new file mode 100644 index 000000000..c8d8cf20b Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/QUERY.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/history (1) (1).png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/history (1) (1).png new file mode 100644 index 000000000..d2211082c Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/history (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/history (1).png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/history (1).png new file mode 100644 index 000000000..d2211082c Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/history (1).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/log1.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/log1.png new file mode 100644 index 000000000..3714ead09 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/log1.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/screenshot-20231017-092613.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/screenshot-20231017-092613.png new file mode 100644 index 000000000..43bd4f7fb Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/screenshot-20231017-092613.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/screenshot-20231017-092957.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/screenshot-20231017-092957.png new file mode 100644 index 000000000..454a22bfa Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/screenshot-20231017-092957.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/shortcut.png b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/shortcut.png new file mode 100644 index 000000000..70b5f62ae Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/prompt-engineering/shortcut.png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (12) (1) (1).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (12) (1) (1).png new file mode 100644 index 000000000..266b5ed2f Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (12) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (17).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (17).png new file mode 100644 index 000000000..5e34307e1 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (17).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (28).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (28).png new file mode 100644 index 000000000..165d029b7 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (28).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (35).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (35).png new file mode 100644 index 000000000..d23c1e393 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (35).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (36).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (36).png new file mode 100644 index 000000000..c24e33de9 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (36).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (50).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (50).png new file mode 100644 index 000000000..cfc68f54f Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (50).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (52).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (52).png new file mode 100644 index 000000000..4d91b1a37 Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (52).png differ diff --git a/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (7) (1) (1).png b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (7) (1) (1).png new file mode 100644 index 000000000..7a19aef3f Binary files /dev/null and b/fa/.gitbook/assets/guides/application_orchestrate/text-generation-application/image (7) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (11) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (11) (1) (1).png new file mode 100644 index 000000000..f9ca100ff Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (11) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (13) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (13) (1) (1).png new file mode 100644 index 000000000..266b5ed2f Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (13) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (130).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (130).png new file mode 100644 index 000000000..090c7766a Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (130).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (14) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (14) (1) (1).png new file mode 100644 index 000000000..407fcbe62 Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (14) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (15) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (15) (1).png new file mode 100644 index 000000000..64e26f7df Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (15) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (3).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (3).png new file mode 100644 index 000000000..f53e8c4cd Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (3).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..7260f11e1 Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (5) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (5) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..bbeaaa87d Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (5) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (6) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (6) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..78e015bb7 Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (6) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (8) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (8) (1) (1) (1) (1).png new file mode 100644 index 000000000..b6aeea571 Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (8) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (9) (1) (1).png b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (9) (1) (1).png new file mode 100644 index 000000000..0fa44bbd8 Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/annotation-reply/image (9) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/biao-zhu/logs/app-log.png b/fa/.gitbook/assets/guides/biao-zhu/logs/app-log.png new file mode 100644 index 000000000..c066d219e Binary files /dev/null and b/fa/.gitbook/assets/guides/biao-zhu/logs/app-log.png differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/api_extension_edit.png b/fa/.gitbook/assets/guides/extension/api_based_extension/api_extension_edit.png new file mode 100644 index 000000000..f030cb5e1 Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/api_extension_edit.png differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/app_tools_edit.png b/fa/.gitbook/assets/guides/extension/api_based_extension/app_tools_edit.png new file mode 100644 index 000000000..ecc056ed2 Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/app_tools_edit.png differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353 (1) (1).png b/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353 (1) (1).png new file mode 100644 index 000000000..cf9c94d56 Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353 (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353 (1).png b/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353 (1).png new file mode 100644 index 000000000..cf9c94d56 Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353 (1).png differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353.png b/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353.png new file mode 100644 index 000000000..cf9c94d56 Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/screenshot-20231128-104353.png differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_8EgAgdMcArHAaJJFEEWA_ngrock copy.jpg b/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_8EgAgdMcArHAaJJFEEWA_ngrock copy.jpg new file mode 100644 index 000000000..a759113a8 Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_8EgAgdMcArHAaJJFEEWA_ngrock copy.jpg differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_Z1SpULkGZ0xDBnSXOhC1_8000.webp b/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_Z1SpULkGZ0xDBnSXOhC1_8000.webp new file mode 100644 index 000000000..fcb794cc0 Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_Z1SpULkGZ0xDBnSXOhC1_8000.webp differ diff --git a/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_kLpE7vN8jg1KrzeCWZtn_download.webp b/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_kLpE7vN8jg1KrzeCWZtn_download.webp new file mode 100644 index 000000000..174eabdfa Binary files /dev/null and b/fa/.gitbook/assets/guides/extension/api_based_extension/spaces_CdDIVDY6AtAz028MFT4d_uploads_kLpE7vN8jg1KrzeCWZtn_download.webp differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/Q&A-pair.png b/fa/.gitbook/assets/guides/knowledge-base/Q&A-pair.png new file mode 100644 index 000000000..362d93824 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/Q&A-pair.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/Weather_search_tool.jpeg b/fa/.gitbook/assets/guides/knowledge-base/Weather_search_tool.jpeg new file mode 100644 index 000000000..dea5d9af7 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/Weather_search_tool.jpeg differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/api_based.png b/fa/.gitbook/assets/guides/knowledge-base/api_based.png new file mode 100644 index 000000000..18f235799 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/api_based.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/api_based_extension1.png b/fa/.gitbook/assets/guides/knowledge-base/api_based_extension1.png new file mode 100644 index 000000000..62eb07602 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/api_based_extension1.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/binding-notion.png b/fa/.gitbook/assets/guides/knowledge-base/binding-notion.png new file mode 100644 index 000000000..63cd1e762 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/binding-notion.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/bulk-add-custom-segment.png b/fa/.gitbook/assets/guides/knowledge-base/bulk-add-custom-segment.png new file mode 100644 index 000000000..e3648c1d3 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/bulk-add-custom-segment.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/create-knowledge-2.png b/fa/.gitbook/assets/guides/knowledge-base/create-knowledge-2.png new file mode 100644 index 000000000..95de7920c Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/create-knowledge-2.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/create-knowledge.png b/fa/.gitbook/assets/guides/knowledge-base/create-knowledge.png new file mode 100644 index 000000000..8de9508d3 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/create-knowledge.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/custom-chunk-settings.png b/fa/.gitbook/assets/guides/knowledge-base/custom-chunk-settings.png new file mode 100644 index 000000000..54dd62e14 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/custom-chunk-settings.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/dataset-api-token.png b/fa/.gitbook/assets/guides/knowledge-base/dataset-api-token.png new file mode 100644 index 000000000..5aa2274af Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/dataset-api-token.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/edit-segment.png b/fa/.gitbook/assets/guides/knowledge-base/edit-segment.png new file mode 100644 index 000000000..96e141f54 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/edit-segment.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/enable-citation-attribution.png b/fa/.gitbook/assets/guides/knowledge-base/enable-citation-attribution.png new file mode 100644 index 000000000..7314bb177 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/enable-citation-attribution.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/full-text-search.png b/fa/.gitbook/assets/guides/knowledge-base/full-text-search.png new file mode 100644 index 000000000..f8ca63423 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/full-text-search.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/hybrid-search.png b/fa/.gitbook/assets/guides/knowledge-base/hybrid-search.png new file mode 100644 index 000000000..aaeb87542 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/hybrid-search.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/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) (1).png b/fa/.gitbook/assets/guides/knowledge-base/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) (1).png new file mode 100644 index 000000000..4874bedd8 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/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) (1).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (1).png b/fa/.gitbook/assets/guides/knowledge-base/image (1).png new file mode 100644 index 000000000..341d71b06 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (1).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (112).png b/fa/.gitbook/assets/guides/knowledge-base/image (112).png new file mode 100644 index 000000000..f948b4db2 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (112).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (128).png b/fa/.gitbook/assets/guides/knowledge-base/image (128).png new file mode 100644 index 000000000..48612bb80 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (128).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (179).png b/fa/.gitbook/assets/guides/knowledge-base/image (179).png new file mode 100644 index 000000000..2a4f6dd99 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (179).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (180).png b/fa/.gitbook/assets/guides/knowledge-base/image (180).png new file mode 100644 index 000000000..ab0267a38 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (180).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (181).png b/fa/.gitbook/assets/guides/knowledge-base/image (181).png new file mode 100644 index 000000000..00accf570 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (181).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (182).png b/fa/.gitbook/assets/guides/knowledge-base/image (182).png new file mode 100644 index 000000000..087d0a557 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (182).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (183).png b/fa/.gitbook/assets/guides/knowledge-base/image (183).png new file mode 100644 index 000000000..339b248a0 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (183).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (185).png b/fa/.gitbook/assets/guides/knowledge-base/image (185).png new file mode 100644 index 000000000..bf813e1d2 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (185).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (186).png b/fa/.gitbook/assets/guides/knowledge-base/image (186).png new file mode 100644 index 000000000..7ad3f05c5 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (186).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (187).png b/fa/.gitbook/assets/guides/knowledge-base/image (187).png new file mode 100644 index 000000000..a8997ebbe Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (187).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (189).png b/fa/.gitbook/assets/guides/knowledge-base/image (189).png new file mode 100644 index 000000000..30e3fef51 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (189).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (190).png b/fa/.gitbook/assets/guides/knowledge-base/image (190).png new file mode 100644 index 000000000..cdb681eab Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (190).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (2).png b/fa/.gitbook/assets/guides/knowledge-base/image (2).png new file mode 100644 index 000000000..8b89e51e1 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (2).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (5).png b/fa/.gitbook/assets/guides/knowledge-base/image (5).png new file mode 100644 index 000000000..77bece24a Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (5).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (6) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/knowledge-base/image (6) (1) (1) (1) (1).png new file mode 100644 index 000000000..2de12b044 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (6) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (6).png b/fa/.gitbook/assets/guides/knowledge-base/image (6).png new file mode 100644 index 000000000..6fbc0e8ec Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (6).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image (7).png b/fa/.gitbook/assets/guides/knowledge-base/image (7).png new file mode 100644 index 000000000..6ebf8cc2c Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image (7).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/image-add-segment.png b/fa/.gitbook/assets/guides/knowledge-base/image-add-segment.png new file mode 100644 index 000000000..53c1ecc41 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/image-add-segment.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/integrate-notion-1.png b/fa/.gitbook/assets/guides/knowledge-base/integrate-notion-1.png new file mode 100644 index 000000000..534d1e629 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/integrate-notion-1.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/log.jpeg b/fa/.gitbook/assets/guides/knowledge-base/log.jpeg new file mode 100644 index 000000000..290c6c06c Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/log.jpeg differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/notion-public-secret.png b/fa/.gitbook/assets/guides/knowledge-base/notion-public-secret.png new file mode 100644 index 000000000..24035bba0 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/notion-public-secret.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/notion-secret.png b/fa/.gitbook/assets/guides/knowledge-base/notion-secret.png new file mode 100644 index 000000000..8c20eca39 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/notion-secret.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/public-integration.png b/fa/.gitbook/assets/guides/knowledge-base/public-integration.png new file mode 100644 index 000000000..6ea5c6140 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/public-integration.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/q2p-and-q2q.png b/fa/.gitbook/assets/guides/knowledge-base/q2p-and-q2q.png new file mode 100644 index 000000000..b701715e3 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/q2p-and-q2q.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/recall-test-setting.png b/fa/.gitbook/assets/guides/knowledge-base/recall-test-setting.png new file mode 100644 index 000000000..74e23a48b Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/recall-test-setting.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/recall-test.png b/fa/.gitbook/assets/guides/knowledge-base/recall-test.png new file mode 100644 index 000000000..847ca13db Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/recall-test.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/setting-rerank-multipath.png b/fa/.gitbook/assets/guides/knowledge-base/setting-rerank-multipath.png new file mode 100644 index 000000000..4874bedd8 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/setting-rerank-multipath.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (1).png b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (1).png new file mode 100644 index 000000000..341d71b06 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (1).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (2).png b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (2).png new file mode 100644 index 000000000..8b89e51e1 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (2).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (5).png b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (5).png new file mode 100644 index 000000000..77bece24a Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (5).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (6).png b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (6).png new file mode 100644 index 000000000..6fbc0e8ec Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (6).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (7).png b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (7).png new file mode 100644 index 000000000..6ebf8cc2c Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/sync-from-website/image (7).png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/sync-notion.png b/fa/.gitbook/assets/guides/knowledge-base/sync-notion.png new file mode 100644 index 000000000..fdb788eae Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/sync-notion.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/vector-search.png b/fa/.gitbook/assets/guides/knowledge-base/vector-search.png new file mode 100644 index 000000000..f38b5a6da Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/vector-search.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/view-citation.png b/fa/.gitbook/assets/guides/knowledge-base/view-citation.png new file mode 100644 index 000000000..8abf43230 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/view-citation.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/viewing-uploaded-document.png b/fa/.gitbook/assets/guides/knowledge-base/viewing-uploaded-document.png new file mode 100644 index 000000000..fd470a305 Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/viewing-uploaded-document.png differ diff --git a/fa/.gitbook/assets/guides/knowledge-base/weather inquiry.png b/fa/.gitbook/assets/guides/knowledge-base/weather inquiry.png new file mode 100644 index 000000000..6852b6b2d Binary files /dev/null and b/fa/.gitbook/assets/guides/knowledge-base/weather inquiry.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/Feb 4,2.png b/fa/.gitbook/assets/guides/model-configuration/Feb 4,2.png new file mode 100644 index 000000000..d2bd2dbe9 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/Feb 4,2.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/choice-model-in-app.png b/fa/.gitbook/assets/guides/model-configuration/choice-model-in-app.png new file mode 100644 index 000000000..02b7704fb Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/choice-model-in-app.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/check-hosted-api.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/check-hosted-api.png new file mode 100644 index 000000000..2f6c180ba Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/check-hosted-api.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/create-model.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/create-model.png new file mode 100644 index 000000000..87560cebe Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/create-model.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/deploy-model.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/deploy-model.png new file mode 100644 index 000000000..043610dd2 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/deploy-model.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/endpoint-url-2.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/endpoint-url-2.png new file mode 100644 index 000000000..fd97348ae Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/endpoint-url-2.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/endpoint-url.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/endpoint-url.png new file mode 100644 index 000000000..12f51f4e5 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/endpoint-url.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/get-model-name.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/get-model-name.png new file mode 100644 index 000000000..da33fb3d0 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/get-model-name.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/image (14) (1) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/huggingface/image (14) (1) (1) (1).png new file mode 100644 index 000000000..ca4cc0b4c Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/image (14) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/select-model-deploy.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/select-model-deploy.png new file mode 100644 index 000000000..d30d2abf7 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/select-model-deploy.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/huggingface/use-model-in-dify.png b/fa/.gitbook/assets/guides/model-configuration/huggingface/use-model-in-dify.png new file mode 100644 index 000000000..4247796c7 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/huggingface/use-model-in-dify.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/image (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..0bde3189d Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (2) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/image (2) (1) (1).png new file mode 100644 index 000000000..47b215fda Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (2) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (4).png b/fa/.gitbook/assets/guides/model-configuration/image (4).png new file mode 100644 index 000000000..3d25110be Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (4).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (6).png b/fa/.gitbook/assets/guides/model-configuration/image (6).png new file mode 100644 index 000000000..6c99d7942 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (6).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (7).png b/fa/.gitbook/assets/guides/model-configuration/image (7).png new file mode 100644 index 000000000..a86810ea4 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (7).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (72).png b/fa/.gitbook/assets/guides/model-configuration/image (72).png new file mode 100644 index 000000000..376298761 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (72).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (73).png b/fa/.gitbook/assets/guides/model-configuration/image (73).png new file mode 100644 index 000000000..0e46b7bb1 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (73).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (74).png b/fa/.gitbook/assets/guides/model-configuration/image (74).png new file mode 100644 index 000000000..1fba4980d Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (74).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (75).png b/fa/.gitbook/assets/guides/model-configuration/image (75).png new file mode 100644 index 000000000..357513b33 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (75).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (76).png b/fa/.gitbook/assets/guides/model-configuration/image (76).png new file mode 100644 index 000000000..87d1a9ffc Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (76).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (78).png b/fa/.gitbook/assets/guides/model-configuration/image (78).png new file mode 100644 index 000000000..95702f395 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (78).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (79).png b/fa/.gitbook/assets/guides/model-configuration/image (79).png new file mode 100644 index 000000000..a06e6bc8f Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (79).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (80).png b/fa/.gitbook/assets/guides/model-configuration/image (80).png new file mode 100644 index 000000000..69f815c41 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (80).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (85).png b/fa/.gitbook/assets/guides/model-configuration/image (85).png new file mode 100644 index 000000000..71c56375f Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (85).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (86).png b/fa/.gitbook/assets/guides/model-configuration/image (86).png new file mode 100644 index 000000000..52b6cebd7 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (86).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image (87).png b/fa/.gitbook/assets/guides/model-configuration/image (87).png new file mode 100644 index 000000000..f9380eb7d Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image (87).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image-20231210143654461.png b/fa/.gitbook/assets/guides/model-configuration/image-20231210143654461.png new file mode 100644 index 000000000..f1c30158d Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image-20231210143654461.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/image-default-models.png b/fa/.gitbook/assets/guides/model-configuration/image-default-models.png new file mode 100644 index 000000000..9440bce8f Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/image-default-models.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (2) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (2) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..2e07e3189 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (2) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (3) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (3) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..a8bb8361e Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (3) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (4) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (4) (1) (1).png new file mode 100644 index 000000000..4716396f2 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (4) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (6) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (6) (1) (1).png new file mode 100644 index 000000000..5f5ac874c Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (6) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (7) (1) (1).png b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (7) (1) (1).png new file mode 100644 index 000000000..711c6d438 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/load-balancing/image (7) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/model-provider-page.png b/fa/.gitbook/assets/guides/model-configuration/model-provider-page.png new file mode 100644 index 000000000..4c76b4558 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/model-provider-page.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/ollama/ollama-config-en.png b/fa/.gitbook/assets/guides/model-configuration/ollama/ollama-config-en.png new file mode 100644 index 000000000..351b275c8 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/ollama/ollama-config-en.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/ollama/ollama-use-model-en.png b/fa/.gitbook/assets/guides/model-configuration/ollama/ollama-use-model-en.png new file mode 100644 index 000000000..e10cf6d6c Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/ollama/ollama-use-model-en.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/ollama/ollama.png b/fa/.gitbook/assets/guides/model-configuration/ollama/ollama.png new file mode 100644 index 000000000..8cd2cf1ed Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/ollama/ollama.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/replicate/replicate-version.png b/fa/.gitbook/assets/guides/model-configuration/replicate/replicate-version.png new file mode 100644 index 000000000..47df9c32d Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/replicate/replicate-version.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/replicate/set-up-replicate.png b/fa/.gitbook/assets/guides/model-configuration/replicate/set-up-replicate.png new file mode 100644 index 000000000..0ef5f7513 Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/replicate/set-up-replicate.png differ diff --git a/fa/.gitbook/assets/guides/model-configuration/xinference/image (16) (1).png b/fa/.gitbook/assets/guides/model-configuration/xinference/image (16) (1).png new file mode 100644 index 000000000..1da79199a Binary files /dev/null and b/fa/.gitbook/assets/guides/model-configuration/xinference/image (16) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/analysis/image (6) (1) (1) (1).png b/fa/.gitbook/assets/guides/monitoring/analysis/image (6) (1) (1) (1).png new file mode 100644 index 000000000..2de12b044 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/analysis/image (6) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (11).png b/fa/.gitbook/assets/guides/monitoring/image (11).png new file mode 100644 index 000000000..4e9e49a00 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (11).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (12).png b/fa/.gitbook/assets/guides/monitoring/image (12).png new file mode 100644 index 000000000..7f6b9b93b Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (12).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (15).png b/fa/.gitbook/assets/guides/monitoring/image (15).png new file mode 100644 index 000000000..3d8499071 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (15).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (18).png b/fa/.gitbook/assets/guides/monitoring/image (18).png new file mode 100644 index 000000000..2082d7b34 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (18).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (2).png b/fa/.gitbook/assets/guides/monitoring/image (2).png new file mode 100644 index 000000000..d9a2868f7 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (2).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (249).png b/fa/.gitbook/assets/guides/monitoring/image (249).png new file mode 100644 index 000000000..41f04536d Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (249).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (251).png b/fa/.gitbook/assets/guides/monitoring/image (251).png new file mode 100644 index 000000000..cc42fb93a Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (251).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (252).png b/fa/.gitbook/assets/guides/monitoring/image (252).png new file mode 100644 index 000000000..0d55c03d9 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (252).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (253).png b/fa/.gitbook/assets/guides/monitoring/image (253).png new file mode 100644 index 000000000..bc8261c8d Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (253).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (254).png b/fa/.gitbook/assets/guides/monitoring/image (254).png new file mode 100644 index 000000000..a13f34cca Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (254).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (255).png b/fa/.gitbook/assets/guides/monitoring/image (255).png new file mode 100644 index 000000000..faff54465 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (255).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (256).png b/fa/.gitbook/assets/guides/monitoring/image (256).png new file mode 100644 index 000000000..f05a3bde4 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (256).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (257).png b/fa/.gitbook/assets/guides/monitoring/image (257).png new file mode 100644 index 000000000..3fc527a56 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (257).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (258).png b/fa/.gitbook/assets/guides/monitoring/image (258).png new file mode 100644 index 000000000..9aad12b5f Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (258).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (259).png b/fa/.gitbook/assets/guides/monitoring/image (259).png new file mode 100644 index 000000000..4078ce320 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (259).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (3) (1).png b/fa/.gitbook/assets/guides/monitoring/image (3) (1).png new file mode 100644 index 000000000..1ac3c4bf4 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (3) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (3).png b/fa/.gitbook/assets/guides/monitoring/image (3).png new file mode 100644 index 000000000..0530c8803 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (3).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (5).png b/fa/.gitbook/assets/guides/monitoring/image (5).png new file mode 100644 index 000000000..9caa2c499 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (5).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (8).png b/fa/.gitbook/assets/guides/monitoring/image (8).png new file mode 100644 index 000000000..30fae3f22 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (8).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (9) (1).png b/fa/.gitbook/assets/guides/monitoring/image (9) (1).png new file mode 100644 index 000000000..5481baead Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (9) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image (9).png b/fa/.gitbook/assets/guides/monitoring/image (9).png new file mode 100644 index 000000000..5481baead Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image (9).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/image.png b/fa/.gitbook/assets/guides/monitoring/image.png new file mode 100644 index 000000000..9fcc6b1bf Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/image.png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (11).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (11).png new file mode 100644 index 000000000..54cc60aca Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (11).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (12).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (12).png new file mode 100644 index 000000000..7f6b9b93b Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (12).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (15).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (15).png new file mode 100644 index 000000000..3d8499071 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (15).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (17).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (17).png new file mode 100644 index 000000000..5e34307e1 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (17).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (18).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (18).png new file mode 100644 index 000000000..2082d7b34 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (18).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (2) (1).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (2) (1).png new file mode 100644 index 000000000..47b215fda Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (2) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (3) (1) (1).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (3) (1) (1).png new file mode 100644 index 000000000..b0946e1bf Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (3) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (3) (1).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (3) (1).png new file mode 100644 index 000000000..1bae2e5c8 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (3) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (5) (1).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (5) (1).png new file mode 100644 index 000000000..67f8a563b Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (5) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (7) (1).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (7) (1).png new file mode 100644 index 000000000..7a19aef3f Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (7) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (8) (1).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (8) (1).png new file mode 100644 index 000000000..f59527de9 Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (8) (1).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (9).png b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (9).png new file mode 100644 index 000000000..6bc95abae Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/integrate_external_ops_tools/integrate-langsmith/image (9).png differ diff --git a/fa/.gitbook/assets/guides/monitoring/monitoring-readme.png b/fa/.gitbook/assets/guides/monitoring/monitoring-readme.png new file mode 100644 index 000000000..0bde3189d Binary files /dev/null and b/fa/.gitbook/assets/guides/monitoring/monitoring-readme.png differ diff --git a/fa/.gitbook/assets/guides/tools/Feb 4, 2024.png b/fa/.gitbook/assets/guides/tools/Feb 4, 2024.png new file mode 100644 index 000000000..6a4446b42 Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/Feb 4, 2024.png differ diff --git a/fa/.gitbook/assets/guides/tools/image (131).png b/fa/.gitbook/assets/guides/tools/image (131).png new file mode 100644 index 000000000..37759572a Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (131).png differ diff --git a/fa/.gitbook/assets/guides/tools/image (134).png b/fa/.gitbook/assets/guides/tools/image (134).png new file mode 100644 index 000000000..5aa2aa317 Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (134).png differ diff --git a/fa/.gitbook/assets/guides/tools/image (136).png b/fa/.gitbook/assets/guides/tools/image (136).png new file mode 100644 index 000000000..5d52df7a2 Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (136).png differ diff --git a/fa/.gitbook/assets/guides/tools/image (139).png b/fa/.gitbook/assets/guides/tools/image (139).png new file mode 100644 index 000000000..282972af7 Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (139).png differ diff --git a/fa/.gitbook/assets/guides/tools/image (144).png b/fa/.gitbook/assets/guides/tools/image (144).png new file mode 100644 index 000000000..9b4746752 Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (144).png differ diff --git a/fa/.gitbook/assets/guides/tools/image (147).png b/fa/.gitbook/assets/guides/tools/image (147).png new file mode 100644 index 000000000..44e663099 Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (147).png differ diff --git a/fa/.gitbook/assets/guides/tools/image (148).png b/fa/.gitbook/assets/guides/tools/image (148).png new file mode 100644 index 000000000..b5b56478f Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (148).png differ diff --git a/fa/.gitbook/assets/guides/tools/image (150).png b/fa/.gitbook/assets/guides/tools/image (150).png new file mode 100644 index 000000000..9a0e697d1 Binary files /dev/null and b/fa/.gitbook/assets/guides/tools/image (150).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/checklist/output (2) (4).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/checklist/output (2) (4).png new file mode 100644 index 000000000..7755a722a Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/checklist/output (2) (4).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/history/output (3) (4).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/history/output (3) (4).png new file mode 100644 index 000000000..e1e9c7f3d Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/history/output (3) (4).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/log/output (1) (6).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/log/output (1) (6).png new file mode 100644 index 000000000..e64fb0276 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/log/output (1) (6).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/log/output (8).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/log/output (8).png new file mode 100644 index 000000000..f48cff1bf Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/log/output (8).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (1) (5).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (1) (5).png new file mode 100644 index 000000000..88b9958fd Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (1) (5).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (2) (3).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (2) (3).png new file mode 100644 index 000000000..cd4e6615b Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (2) (3).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (7).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (7).png new file mode 100644 index 000000000..fffbac3b4 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/preview-and-run/output (7).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/step-run/output (3) (3).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/step-run/output (3) (3).png new file mode 100644 index 000000000..b32d4cebb Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/step-run/output (3) (3).png differ diff --git a/fa/.gitbook/assets/guides/workflow/debug_and_preview/step-run/output (4) (2).png b/fa/.gitbook/assets/guides/workflow/debug_and_preview/step-run/output (4) (2).png new file mode 100644 index 000000000..bf6b384e3 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/debug_and_preview/step-run/output (4) (2).png differ diff --git a/fa/.gitbook/assets/guides/workflow/export-import/output (5) (2).png b/fa/.gitbook/assets/guides/workflow/export-import/output (5) (2).png new file mode 100644 index 000000000..bea184695 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/export-import/output (5) (2).png differ diff --git a/fa/.gitbook/assets/guides/workflow/export-import/output (6) (1).png b/fa/.gitbook/assets/guides/workflow/export-import/output (6) (1).png new file mode 100644 index 000000000..a744a29d4 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/export-import/output (6) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/export-import/output (7) (1).png b/fa/.gitbook/assets/guides/workflow/export-import/output (7) (1).png new file mode 100644 index 000000000..70a47ee7e Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/export-import/output (7) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/image (156).png b/fa/.gitbook/assets/guides/workflow/image (156).png new file mode 100644 index 000000000..4f2d7dda3 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/image (156).png differ diff --git a/fa/.gitbook/assets/guides/workflow/key-concepts/output (4).png b/fa/.gitbook/assets/guides/workflow/key-concepts/output (4).png new file mode 100644 index 000000000..0d295d932 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/key-concepts/output (4).png differ diff --git a/fa/.gitbook/assets/guides/workflow/key-concepts/output.png b/fa/.gitbook/assets/guides/workflow/key-concepts/output.png new file mode 100644 index 000000000..3938faa1b Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/key-concepts/output.png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/answer/answer-img-1.png b/fa/.gitbook/assets/guides/workflow/node/answer/answer-img-1.png new file mode 100644 index 000000000..a2986bd36 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/answer/answer-img-1.png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/answer/answer-img-2.png b/fa/.gitbook/assets/guides/workflow/node/answer/answer-img-2.png new file mode 100644 index 000000000..83e5b26b4 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/answer/answer-img-2.png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/answer/answer-plain-text.png b/fa/.gitbook/assets/guides/workflow/node/answer/answer-plain-text.png new file mode 100644 index 000000000..07294e06b Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/answer/answer-plain-text.png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/code/image (157).png b/fa/.gitbook/assets/guides/workflow/node/code/image (157).png new file mode 100644 index 000000000..582917a33 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/code/image (157).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/end/image (233).png b/fa/.gitbook/assets/guides/workflow/node/end/image (233).png new file mode 100644 index 000000000..3620ab321 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/end/image (233).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/end/output (1) (3).png b/fa/.gitbook/assets/guides/workflow/node/end/output (1) (3).png new file mode 100644 index 000000000..c178f7b32 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/end/output (1) (3).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/end/output (5).png b/fa/.gitbook/assets/guides/workflow/node/end/output (5).png new file mode 100644 index 000000000..ee08880ee Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/end/output (5).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/http_request/http-config.png b/fa/.gitbook/assets/guides/workflow/node/http_request/http-config.png new file mode 100644 index 000000000..375a9d00c Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/http_request/http-config.png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/http_request/http-use-case.png b/fa/.gitbook/assets/guides/workflow/node/http_request/http-use-case.png new file mode 100644 index 000000000..e87f63f44 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/http_request/http-use-case.png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/ifelse/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/ifelse/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..b98d4eea7 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/ifelse/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/ifelse/mutliple-judgement.png b/fa/.gitbook/assets/guides/workflow/node/ifelse/mutliple-judgement.png new file mode 100644 index 000000000..cd231dfee Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/ifelse/mutliple-judgement.png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..b10f2b77a Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (2) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (2) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..2e07e3189 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (2) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (207).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (207).png new file mode 100644 index 000000000..e27de94b3 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (207).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (209).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (209).png new file mode 100644 index 000000000..01263d674 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (209).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (210).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (210).png new file mode 100644 index 000000000..99d9805b4 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (210).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (211).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (211).png new file mode 100644 index 000000000..f5ec63535 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (211).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (213).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (213).png new file mode 100644 index 000000000..5e95c80db Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (213).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (214).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (214).png new file mode 100644 index 000000000..beff0e92f Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (214).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (220).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (220).png new file mode 100644 index 000000000..ab201b5a0 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (220).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (221).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (221).png new file mode 100644 index 000000000..2465d0735 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (221).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (222).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (222).png new file mode 100644 index 000000000..b0cae1688 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (222).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (223).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (223).png new file mode 100644 index 000000000..e9e968601 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (223).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/iteration/image (3) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/iteration/image (3) (1) (1) (1) (1).png new file mode 100644 index 000000000..0129d8cc0 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/iteration/image (3) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/knowledge/image (193).png b/fa/.gitbook/assets/guides/workflow/node/knowledge/image (193).png new file mode 100644 index 000000000..b0dcef49b Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/knowledge/image (193).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/knowledge/image (2) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/knowledge/image (2) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..d60d08457 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/knowledge/image (2) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/knowledge/image (3) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/knowledge/image (3) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..cfc2125c3 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/knowledge/image (3) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/llm/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/llm/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..c98dd8620 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/llm/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/llm/image (200).png b/fa/.gitbook/assets/guides/workflow/node/llm/image (200).png new file mode 100644 index 000000000..7bfedc18f Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/llm/image (200).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/llm/image (202).png b/fa/.gitbook/assets/guides/workflow/node/llm/image (202).png new file mode 100644 index 000000000..05ba16e39 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/llm/image (202).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/llm/image (203).png b/fa/.gitbook/assets/guides/workflow/node/llm/image (203).png new file mode 100644 index 000000000..1b49eda87 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/llm/image (203).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/llm/image (204).png b/fa/.gitbook/assets/guides/workflow/node/llm/image (204).png new file mode 100644 index 000000000..35d5a52d8 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/llm/image (204).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/llm/image (205).png b/fa/.gitbook/assets/guides/workflow/node/llm/image (205).png new file mode 100644 index 000000000..38080669b Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/llm/image (205).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..303573616 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (200).png b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (200).png new file mode 100644 index 000000000..7bfedc18f Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (200).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (203).png b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (203).png new file mode 100644 index 000000000..1b49eda87 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (203).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (3) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (3) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..f03320e44 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (3) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (8) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (8) (1) (1).png new file mode 100644 index 000000000..fecf1d75f Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/parameter-extractor/image (8) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/question_classifier/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/question_classifier/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..1b7b6c61c Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/question_classifier/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/question_classifier/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/guides/workflow/node/question_classifier/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..a23ad8f9b Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/question_classifier/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/start/image (236).png b/fa/.gitbook/assets/guides/workflow/node/start/image (236).png new file mode 100644 index 000000000..944f750dc Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/start/image (236).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/start/output (2) (1).png b/fa/.gitbook/assets/guides/workflow/node/start/output (2) (1).png new file mode 100644 index 000000000..b408c8a4a Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/start/output (2) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/start/output (3) (1).png b/fa/.gitbook/assets/guides/workflow/node/start/output (3) (1).png new file mode 100644 index 000000000..27d243d6b Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/start/output (3) (1).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/template/image (158).png b/fa/.gitbook/assets/guides/workflow/node/template/image (158).png new file mode 100644 index 000000000..82b117567 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/template/image (158).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/template/image (159).png b/fa/.gitbook/assets/guides/workflow/node/template/image (159).png new file mode 100644 index 000000000..b744beee2 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/template/image (159).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/tools/image (231).png b/fa/.gitbook/assets/guides/workflow/node/tools/image (231).png new file mode 100644 index 000000000..522ece125 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/tools/image (231).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/tools/image (232).png b/fa/.gitbook/assets/guides/workflow/node/tools/image (232).png new file mode 100644 index 000000000..42dd1b6ba Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/tools/image (232).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (225).png b/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (225).png new file mode 100644 index 000000000..98c907245 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (225).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (226).png b/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (226).png new file mode 100644 index 000000000..fc4736404 Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (226).png differ diff --git a/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (227).png b/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (227).png new file mode 100644 index 000000000..11d4ca10d Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/node/variable_assigner/image (227).png differ diff --git a/fa/.gitbook/assets/guides/workflow/publish/output (4) (3).png b/fa/.gitbook/assets/guides/workflow/publish/output (4) (3).png new file mode 100644 index 000000000..ac78f47bc Binary files /dev/null and b/fa/.gitbook/assets/guides/workflow/publish/output (4) (3).png differ diff --git a/fa/.gitbook/assets/guides/workspace/app/creat-customize-app.jpg b/fa/.gitbook/assets/guides/workspace/app/creat-customize-app.jpg new file mode 100644 index 000000000..aa6db329e Binary files /dev/null and b/fa/.gitbook/assets/guides/workspace/app/creat-customize-app.jpg differ diff --git a/fa/.gitbook/assets/guides/workspace/create-app.png b/fa/.gitbook/assets/guides/workspace/create-app.png new file mode 100644 index 000000000..c11dbeffc Binary files /dev/null and b/fa/.gitbook/assets/guides/workspace/create-app.png differ diff --git a/fa/.gitbook/assets/guides/workspace/image (248).png b/fa/.gitbook/assets/guides/workspace/image (248).png new file mode 100644 index 000000000..0fee7ffa6 Binary files /dev/null and b/fa/.gitbook/assets/guides/workspace/image (248).png differ diff --git a/fa/.gitbook/assets/history (1).png b/fa/.gitbook/assets/history (1).png new file mode 100644 index 000000000..d2211082c Binary files /dev/null and b/fa/.gitbook/assets/history (1).png differ diff --git a/fa/.gitbook/assets/history.png b/fa/.gitbook/assets/history.png new file mode 100644 index 000000000..d2211082c Binary files /dev/null and b/fa/.gitbook/assets/history.png differ diff --git a/fa/.gitbook/assets/http-config.png b/fa/.gitbook/assets/http-config.png new file mode 100644 index 000000000..375a9d00c Binary files /dev/null and b/fa/.gitbook/assets/http-config.png differ diff --git a/fa/.gitbook/assets/http-use-case.png b/fa/.gitbook/assets/http-use-case.png new file mode 100644 index 000000000..e87f63f44 Binary files /dev/null and b/fa/.gitbook/assets/http-use-case.png differ diff --git a/fa/.gitbook/assets/hybrid-search (1).png b/fa/.gitbook/assets/hybrid-search (1).png new file mode 100644 index 000000000..b8f0bc391 Binary files /dev/null and b/fa/.gitbook/assets/hybrid-search (1).png differ diff --git a/fa/.gitbook/assets/hybrid-search.png b/fa/.gitbook/assets/hybrid-search.png new file mode 100644 index 000000000..aaeb87542 Binary files /dev/null and b/fa/.gitbook/assets/hybrid-search.png differ diff --git a/fa/.gitbook/assets/if-else-conditional.png b/fa/.gitbook/assets/if-else-conditional.png new file mode 100644 index 000000000..4b1370334 Binary files /dev/null and b/fa/.gitbook/assets/if-else-conditional.png differ diff --git a/fa/.gitbook/assets/if-else-elif.png b/fa/.gitbook/assets/if-else-elif.png new file mode 100644 index 000000000..7e59f506c Binary files /dev/null and b/fa/.gitbook/assets/if-else-elif.png differ diff --git a/fa/.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) (1).png b/fa/.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) (1).png new file mode 100644 index 000000000..7255a2bb6 Binary files /dev/null and b/fa/.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) (1).png differ diff --git a/fa/.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/fa/.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 000000000..74855c9bc Binary files /dev/null and b/fa/.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/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..b98d4eea7 Binary files /dev/null and b/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..c98dd8620 Binary files /dev/null and b/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..303573616 Binary files /dev/null and b/fa/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (1) (1) (1) (1).png b/fa/.gitbook/assets/image (1) (1) (1) (1).png new file mode 100644 index 000000000..b10f2b77a Binary files /dev/null and b/fa/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (1) (1) (1).png b/fa/.gitbook/assets/image (1) (1) (1).png new file mode 100644 index 000000000..11137b141 Binary files /dev/null and b/fa/.gitbook/assets/image (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (1) (1).png b/fa/.gitbook/assets/image (1) (1).png new file mode 100644 index 000000000..1d8ff795b Binary files /dev/null and b/fa/.gitbook/assets/image (1) (1).png differ diff --git a/fa/.gitbook/assets/image (1) (2).png b/fa/.gitbook/assets/image (1) (2).png new file mode 100644 index 000000000..341d71b06 Binary files /dev/null and b/fa/.gitbook/assets/image (1) (2).png differ diff --git a/fa/.gitbook/assets/image (1).png b/fa/.gitbook/assets/image (1).png new file mode 100644 index 000000000..ac2d947ce Binary files /dev/null and b/fa/.gitbook/assets/image (1).png differ diff --git a/fa/.gitbook/assets/image (10) (1).png b/fa/.gitbook/assets/image (10) (1).png new file mode 100644 index 000000000..c422797fa Binary files /dev/null and b/fa/.gitbook/assets/image (10) (1).png differ diff --git a/fa/.gitbook/assets/image (10).png b/fa/.gitbook/assets/image (10).png new file mode 100644 index 000000000..30fae3f22 Binary files /dev/null and b/fa/.gitbook/assets/image (10).png differ diff --git a/fa/.gitbook/assets/image (100).png b/fa/.gitbook/assets/image (100).png new file mode 100644 index 000000000..2cd9d39c9 Binary files /dev/null and b/fa/.gitbook/assets/image (100).png differ diff --git a/fa/.gitbook/assets/image (101).png b/fa/.gitbook/assets/image (101).png new file mode 100644 index 000000000..2a9594b82 Binary files /dev/null and b/fa/.gitbook/assets/image (101).png differ diff --git a/fa/.gitbook/assets/image (102).png b/fa/.gitbook/assets/image (102).png new file mode 100644 index 000000000..1ec7c9d6a Binary files /dev/null and b/fa/.gitbook/assets/image (102).png differ diff --git a/fa/.gitbook/assets/image (103).png b/fa/.gitbook/assets/image (103).png new file mode 100644 index 000000000..bae189f41 Binary files /dev/null and b/fa/.gitbook/assets/image (103).png differ diff --git a/fa/.gitbook/assets/image (104).png b/fa/.gitbook/assets/image (104).png new file mode 100644 index 000000000..7eed466d7 Binary files /dev/null and b/fa/.gitbook/assets/image (104).png differ diff --git a/fa/.gitbook/assets/image (105).png b/fa/.gitbook/assets/image (105).png new file mode 100644 index 000000000..7fff3a650 Binary files /dev/null and b/fa/.gitbook/assets/image (105).png differ diff --git a/fa/.gitbook/assets/image (106).png b/fa/.gitbook/assets/image (106).png new file mode 100644 index 000000000..4fb4d6792 Binary files /dev/null and b/fa/.gitbook/assets/image (106).png differ diff --git a/fa/.gitbook/assets/image (107).png b/fa/.gitbook/assets/image (107).png new file mode 100644 index 000000000..4a491701c Binary files /dev/null and b/fa/.gitbook/assets/image (107).png differ diff --git a/fa/.gitbook/assets/image (108).png b/fa/.gitbook/assets/image (108).png new file mode 100644 index 000000000..27452ba02 Binary files /dev/null and b/fa/.gitbook/assets/image (108).png differ diff --git a/fa/.gitbook/assets/image (109).png b/fa/.gitbook/assets/image (109).png new file mode 100644 index 000000000..4b9b9b6e8 Binary files /dev/null and b/fa/.gitbook/assets/image (109).png differ diff --git a/fa/.gitbook/assets/image (11) (1) (1).png b/fa/.gitbook/assets/image (11) (1) (1).png new file mode 100644 index 000000000..f9ca100ff Binary files /dev/null and b/fa/.gitbook/assets/image (11) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (11) (1).png b/fa/.gitbook/assets/image (11) (1).png new file mode 100644 index 000000000..f9ca100ff Binary files /dev/null and b/fa/.gitbook/assets/image (11) (1).png differ diff --git a/fa/.gitbook/assets/image (11) (2).png b/fa/.gitbook/assets/image (11) (2).png new file mode 100644 index 000000000..54cc60aca Binary files /dev/null and b/fa/.gitbook/assets/image (11) (2).png differ diff --git a/fa/.gitbook/assets/image (11).png b/fa/.gitbook/assets/image (11).png new file mode 100644 index 000000000..5481baead Binary files /dev/null and b/fa/.gitbook/assets/image (11).png differ diff --git a/fa/.gitbook/assets/image (110).png b/fa/.gitbook/assets/image (110).png new file mode 100644 index 000000000..6ed9b8550 Binary files /dev/null and b/fa/.gitbook/assets/image (110).png differ diff --git a/fa/.gitbook/assets/image (111).png b/fa/.gitbook/assets/image (111).png new file mode 100644 index 000000000..614b13bbe Binary files /dev/null and b/fa/.gitbook/assets/image (111).png differ diff --git a/fa/.gitbook/assets/image (112) (1).png b/fa/.gitbook/assets/image (112) (1).png new file mode 100644 index 000000000..f948b4db2 Binary files /dev/null and b/fa/.gitbook/assets/image (112) (1).png differ diff --git a/fa/.gitbook/assets/image (112).png b/fa/.gitbook/assets/image (112).png new file mode 100644 index 000000000..f948b4db2 Binary files /dev/null and b/fa/.gitbook/assets/image (112).png differ diff --git a/fa/.gitbook/assets/image (113).png b/fa/.gitbook/assets/image (113).png new file mode 100644 index 000000000..90227d4f5 Binary files /dev/null and b/fa/.gitbook/assets/image (113).png differ diff --git a/fa/.gitbook/assets/image (114).png b/fa/.gitbook/assets/image (114).png new file mode 100644 index 000000000..90227d4f5 Binary files /dev/null and b/fa/.gitbook/assets/image (114).png differ diff --git a/fa/.gitbook/assets/image (115).png b/fa/.gitbook/assets/image (115).png new file mode 100644 index 000000000..45cbb8ec4 Binary files /dev/null and b/fa/.gitbook/assets/image (115).png differ diff --git a/fa/.gitbook/assets/image (116).png b/fa/.gitbook/assets/image (116).png new file mode 100644 index 000000000..931081ab1 Binary files /dev/null and b/fa/.gitbook/assets/image (116).png differ diff --git a/fa/.gitbook/assets/image (118).png b/fa/.gitbook/assets/image (118).png new file mode 100644 index 000000000..fa26086df Binary files /dev/null and b/fa/.gitbook/assets/image (118).png differ diff --git a/fa/.gitbook/assets/image (119).png b/fa/.gitbook/assets/image (119).png new file mode 100644 index 000000000..aedb3eefe Binary files /dev/null and b/fa/.gitbook/assets/image (119).png differ diff --git a/fa/.gitbook/assets/image (12) (1).png b/fa/.gitbook/assets/image (12) (1).png new file mode 100644 index 000000000..266b5ed2f Binary files /dev/null and b/fa/.gitbook/assets/image (12) (1).png differ diff --git a/fa/.gitbook/assets/image (12).png b/fa/.gitbook/assets/image (12).png new file mode 100644 index 000000000..5481baead Binary files /dev/null and b/fa/.gitbook/assets/image (12).png differ diff --git a/fa/.gitbook/assets/image (120).png b/fa/.gitbook/assets/image (120).png new file mode 100644 index 000000000..b9adb9137 Binary files /dev/null and b/fa/.gitbook/assets/image (120).png differ diff --git a/fa/.gitbook/assets/image (121).png b/fa/.gitbook/assets/image (121).png new file mode 100644 index 000000000..463b6e52b Binary files /dev/null and b/fa/.gitbook/assets/image (121).png differ diff --git a/fa/.gitbook/assets/image (122).png b/fa/.gitbook/assets/image (122).png new file mode 100644 index 000000000..e6b588e02 Binary files /dev/null and b/fa/.gitbook/assets/image (122).png differ diff --git a/fa/.gitbook/assets/image (125).png b/fa/.gitbook/assets/image (125).png new file mode 100644 index 000000000..6357ab31b Binary files /dev/null and b/fa/.gitbook/assets/image (125).png differ diff --git a/fa/.gitbook/assets/image (126).png b/fa/.gitbook/assets/image (126).png new file mode 100644 index 000000000..afb7257ed Binary files /dev/null and b/fa/.gitbook/assets/image (126).png differ diff --git a/fa/.gitbook/assets/image (127).png b/fa/.gitbook/assets/image (127).png new file mode 100644 index 000000000..eddf580ef Binary files /dev/null and b/fa/.gitbook/assets/image (127).png differ diff --git a/fa/.gitbook/assets/image (128) (1).png b/fa/.gitbook/assets/image (128) (1).png new file mode 100644 index 000000000..48612bb80 Binary files /dev/null and b/fa/.gitbook/assets/image (128) (1).png differ diff --git a/fa/.gitbook/assets/image (128).png b/fa/.gitbook/assets/image (128).png new file mode 100644 index 000000000..48612bb80 Binary files /dev/null and b/fa/.gitbook/assets/image (128).png differ diff --git a/fa/.gitbook/assets/image (129).png b/fa/.gitbook/assets/image (129).png new file mode 100644 index 000000000..abbd93161 Binary files /dev/null and b/fa/.gitbook/assets/image (129).png differ diff --git a/fa/.gitbook/assets/image (13) (1) (1).png b/fa/.gitbook/assets/image (13) (1) (1).png new file mode 100644 index 000000000..266b5ed2f Binary files /dev/null and b/fa/.gitbook/assets/image (13) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (13) (1).png b/fa/.gitbook/assets/image (13) (1).png new file mode 100644 index 000000000..266b5ed2f Binary files /dev/null and b/fa/.gitbook/assets/image (13) (1).png differ diff --git a/fa/.gitbook/assets/image (13).png b/fa/.gitbook/assets/image (13).png new file mode 100644 index 000000000..4e9e49a00 Binary files /dev/null and b/fa/.gitbook/assets/image (13).png differ diff --git a/fa/.gitbook/assets/image (130).png b/fa/.gitbook/assets/image (130).png new file mode 100644 index 000000000..090c7766a Binary files /dev/null and b/fa/.gitbook/assets/image (130).png differ diff --git a/fa/.gitbook/assets/image (131).png b/fa/.gitbook/assets/image (131).png new file mode 100644 index 000000000..37759572a Binary files /dev/null and b/fa/.gitbook/assets/image (131).png differ diff --git a/fa/.gitbook/assets/image (134).png b/fa/.gitbook/assets/image (134).png new file mode 100644 index 000000000..5aa2aa317 Binary files /dev/null and b/fa/.gitbook/assets/image (134).png differ diff --git a/fa/.gitbook/assets/image (136).png b/fa/.gitbook/assets/image (136).png new file mode 100644 index 000000000..5d52df7a2 Binary files /dev/null and b/fa/.gitbook/assets/image (136).png differ diff --git a/fa/.gitbook/assets/image (139).png b/fa/.gitbook/assets/image (139).png new file mode 100644 index 000000000..282972af7 Binary files /dev/null and b/fa/.gitbook/assets/image (139).png differ diff --git a/fa/.gitbook/assets/image (14) (1) (1) (1).png b/fa/.gitbook/assets/image (14) (1) (1) (1).png new file mode 100644 index 000000000..ca4cc0b4c Binary files /dev/null and b/fa/.gitbook/assets/image (14) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (14) (1) (1).png b/fa/.gitbook/assets/image (14) (1) (1).png new file mode 100644 index 000000000..407fcbe62 Binary files /dev/null and b/fa/.gitbook/assets/image (14) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (14).png b/fa/.gitbook/assets/image (14).png new file mode 100644 index 000000000..1ac3c4bf4 Binary files /dev/null and b/fa/.gitbook/assets/image (14).png differ diff --git a/fa/.gitbook/assets/image (144).png b/fa/.gitbook/assets/image (144).png new file mode 100644 index 000000000..9b4746752 Binary files /dev/null and b/fa/.gitbook/assets/image (144).png differ diff --git a/fa/.gitbook/assets/image (147).png b/fa/.gitbook/assets/image (147).png new file mode 100644 index 000000000..44e663099 Binary files /dev/null and b/fa/.gitbook/assets/image (147).png differ diff --git a/fa/.gitbook/assets/image (148).png b/fa/.gitbook/assets/image (148).png new file mode 100644 index 000000000..b5b56478f Binary files /dev/null and b/fa/.gitbook/assets/image (148).png differ diff --git a/fa/.gitbook/assets/image (15) (1) (1).png b/fa/.gitbook/assets/image (15) (1) (1).png new file mode 100644 index 000000000..64e26f7df Binary files /dev/null and b/fa/.gitbook/assets/image (15) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (15) (1).png b/fa/.gitbook/assets/image (15) (1).png new file mode 100644 index 000000000..db1690fa5 Binary files /dev/null and b/fa/.gitbook/assets/image (15) (1).png differ diff --git a/fa/.gitbook/assets/image (15) (2).png b/fa/.gitbook/assets/image (15) (2).png new file mode 100644 index 000000000..3d8499071 Binary files /dev/null and b/fa/.gitbook/assets/image (15) (2).png differ diff --git a/fa/.gitbook/assets/image (15).png b/fa/.gitbook/assets/image (15).png new file mode 100644 index 000000000..311a8f0f0 Binary files /dev/null and b/fa/.gitbook/assets/image (15).png differ diff --git a/fa/.gitbook/assets/image (150).png b/fa/.gitbook/assets/image (150).png new file mode 100644 index 000000000..9a0e697d1 Binary files /dev/null and b/fa/.gitbook/assets/image (150).png differ diff --git a/fa/.gitbook/assets/image (156).png b/fa/.gitbook/assets/image (156).png new file mode 100644 index 000000000..4f2d7dda3 Binary files /dev/null and b/fa/.gitbook/assets/image (156).png differ diff --git a/fa/.gitbook/assets/image (157).png b/fa/.gitbook/assets/image (157).png new file mode 100644 index 000000000..582917a33 Binary files /dev/null and b/fa/.gitbook/assets/image (157).png differ diff --git a/fa/.gitbook/assets/image (158).png b/fa/.gitbook/assets/image (158).png new file mode 100644 index 000000000..82b117567 Binary files /dev/null and b/fa/.gitbook/assets/image (158).png differ diff --git a/fa/.gitbook/assets/image (159).png b/fa/.gitbook/assets/image (159).png new file mode 100644 index 000000000..b744beee2 Binary files /dev/null and b/fa/.gitbook/assets/image (159).png differ diff --git a/fa/.gitbook/assets/image (16) (1) (1).png b/fa/.gitbook/assets/image (16) (1) (1).png new file mode 100644 index 000000000..1da79199a Binary files /dev/null and b/fa/.gitbook/assets/image (16) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (16) (1).png b/fa/.gitbook/assets/image (16) (1).png new file mode 100644 index 000000000..100ad7e60 Binary files /dev/null and b/fa/.gitbook/assets/image (16) (1).png differ diff --git a/fa/.gitbook/assets/image (16).png b/fa/.gitbook/assets/image (16).png new file mode 100644 index 000000000..47b215fda Binary files /dev/null and b/fa/.gitbook/assets/image (16).png differ diff --git a/fa/.gitbook/assets/image (167).png b/fa/.gitbook/assets/image (167).png new file mode 100644 index 000000000..9bc76cc20 Binary files /dev/null and b/fa/.gitbook/assets/image (167).png differ diff --git a/fa/.gitbook/assets/image (168).png b/fa/.gitbook/assets/image (168).png new file mode 100644 index 000000000..7e67a52e6 Binary files /dev/null and b/fa/.gitbook/assets/image (168).png differ diff --git a/fa/.gitbook/assets/image (169).png b/fa/.gitbook/assets/image (169).png new file mode 100644 index 000000000..0ae35e2ce Binary files /dev/null and b/fa/.gitbook/assets/image (169).png differ diff --git a/fa/.gitbook/assets/image (17) (1).png b/fa/.gitbook/assets/image (17) (1).png new file mode 100644 index 000000000..5e34307e1 Binary files /dev/null and b/fa/.gitbook/assets/image (17) (1).png differ diff --git a/fa/.gitbook/assets/image (17) (2).png b/fa/.gitbook/assets/image (17) (2).png new file mode 100644 index 000000000..5e34307e1 Binary files /dev/null and b/fa/.gitbook/assets/image (17) (2).png differ diff --git a/fa/.gitbook/assets/image (17).png b/fa/.gitbook/assets/image (17).png new file mode 100644 index 000000000..df5452b29 Binary files /dev/null and b/fa/.gitbook/assets/image (17).png differ diff --git a/fa/.gitbook/assets/image (170).png b/fa/.gitbook/assets/image (170).png new file mode 100644 index 000000000..b4d7d1f14 Binary files /dev/null and b/fa/.gitbook/assets/image (170).png differ diff --git a/fa/.gitbook/assets/image (172).png b/fa/.gitbook/assets/image (172).png new file mode 100644 index 000000000..60d6ce87d Binary files /dev/null and b/fa/.gitbook/assets/image (172).png differ diff --git a/fa/.gitbook/assets/image (179).png b/fa/.gitbook/assets/image (179).png new file mode 100644 index 000000000..2a4f6dd99 Binary files /dev/null and b/fa/.gitbook/assets/image (179).png differ diff --git a/fa/.gitbook/assets/image (18) (1).png b/fa/.gitbook/assets/image (18) (1).png new file mode 100644 index 000000000..2082d7b34 Binary files /dev/null and b/fa/.gitbook/assets/image (18) (1).png differ diff --git a/fa/.gitbook/assets/image (18) (2).png b/fa/.gitbook/assets/image (18) (2).png new file mode 100644 index 000000000..2082d7b34 Binary files /dev/null and b/fa/.gitbook/assets/image (18) (2).png differ diff --git a/fa/.gitbook/assets/image (18).png b/fa/.gitbook/assets/image (18).png new file mode 100644 index 000000000..1bae2e5c8 Binary files /dev/null and b/fa/.gitbook/assets/image (18).png differ diff --git a/fa/.gitbook/assets/image (180).png b/fa/.gitbook/assets/image (180).png new file mode 100644 index 000000000..ab0267a38 Binary files /dev/null and b/fa/.gitbook/assets/image (180).png differ diff --git a/fa/.gitbook/assets/image (181).png b/fa/.gitbook/assets/image (181).png new file mode 100644 index 000000000..00accf570 Binary files /dev/null and b/fa/.gitbook/assets/image (181).png differ diff --git a/fa/.gitbook/assets/image (182).png b/fa/.gitbook/assets/image (182).png new file mode 100644 index 000000000..087d0a557 Binary files /dev/null and b/fa/.gitbook/assets/image (182).png differ diff --git a/fa/.gitbook/assets/image (183).png b/fa/.gitbook/assets/image (183).png new file mode 100644 index 000000000..339b248a0 Binary files /dev/null and b/fa/.gitbook/assets/image (183).png differ diff --git a/fa/.gitbook/assets/image (185).png b/fa/.gitbook/assets/image (185).png new file mode 100644 index 000000000..bf813e1d2 Binary files /dev/null and b/fa/.gitbook/assets/image (185).png differ diff --git a/fa/.gitbook/assets/image (186).png b/fa/.gitbook/assets/image (186).png new file mode 100644 index 000000000..7ad3f05c5 Binary files /dev/null and b/fa/.gitbook/assets/image (186).png differ diff --git a/fa/.gitbook/assets/image (187).png b/fa/.gitbook/assets/image (187).png new file mode 100644 index 000000000..a8997ebbe Binary files /dev/null and b/fa/.gitbook/assets/image (187).png differ diff --git a/fa/.gitbook/assets/image (189).png b/fa/.gitbook/assets/image (189).png new file mode 100644 index 000000000..30e3fef51 Binary files /dev/null and b/fa/.gitbook/assets/image (189).png differ diff --git a/fa/.gitbook/assets/image (19) (1).png b/fa/.gitbook/assets/image (19) (1).png new file mode 100644 index 000000000..147eeff5b Binary files /dev/null and b/fa/.gitbook/assets/image (19) (1).png differ diff --git a/fa/.gitbook/assets/image (19).png b/fa/.gitbook/assets/image (19).png new file mode 100644 index 000000000..67f8a563b Binary files /dev/null and b/fa/.gitbook/assets/image (19).png differ diff --git a/fa/.gitbook/assets/image (190) (1).png b/fa/.gitbook/assets/image (190) (1).png new file mode 100644 index 000000000..cdb681eab Binary files /dev/null and b/fa/.gitbook/assets/image (190) (1).png differ diff --git a/fa/.gitbook/assets/image (190).png b/fa/.gitbook/assets/image (190).png new file mode 100644 index 000000000..cdb681eab Binary files /dev/null and b/fa/.gitbook/assets/image (190).png differ diff --git a/fa/.gitbook/assets/image (193).png b/fa/.gitbook/assets/image (193).png new file mode 100644 index 000000000..b0dcef49b Binary files /dev/null and b/fa/.gitbook/assets/image (193).png differ diff --git a/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..9440bce8f Binary files /dev/null and b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..1b7b6c61c Binary files /dev/null and b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..d60d08457 Binary files /dev/null and b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..375a9d00c Binary files /dev/null and b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..2e07e3189 Binary files /dev/null and b/fa/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (2) (1) (1).png b/fa/.gitbook/assets/image (2) (1) (1).png new file mode 100644 index 000000000..47b215fda Binary files /dev/null and b/fa/.gitbook/assets/image (2) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (2) (1).png b/fa/.gitbook/assets/image (2) (1).png new file mode 100644 index 000000000..2e07e3189 Binary files /dev/null and b/fa/.gitbook/assets/image (2) (1).png differ diff --git a/fa/.gitbook/assets/image (2) (2).png b/fa/.gitbook/assets/image (2) (2).png new file mode 100644 index 000000000..d60d08457 Binary files /dev/null and b/fa/.gitbook/assets/image (2) (2).png differ diff --git a/fa/.gitbook/assets/image (2) (3).png b/fa/.gitbook/assets/image (2) (3).png new file mode 100644 index 000000000..8b89e51e1 Binary files /dev/null and b/fa/.gitbook/assets/image (2) (3).png differ diff --git a/fa/.gitbook/assets/image (2).png b/fa/.gitbook/assets/image (2).png new file mode 100644 index 000000000..1cccfda0b Binary files /dev/null and b/fa/.gitbook/assets/image (2).png differ diff --git a/fa/.gitbook/assets/image (20).png b/fa/.gitbook/assets/image (20).png new file mode 100644 index 000000000..96e141f54 Binary files /dev/null and b/fa/.gitbook/assets/image (20).png differ diff --git a/fa/.gitbook/assets/image (200).png b/fa/.gitbook/assets/image (200).png new file mode 100644 index 000000000..7bfedc18f Binary files /dev/null and b/fa/.gitbook/assets/image (200).png differ diff --git a/fa/.gitbook/assets/image (202).png b/fa/.gitbook/assets/image (202).png new file mode 100644 index 000000000..05ba16e39 Binary files /dev/null and b/fa/.gitbook/assets/image (202).png differ diff --git a/fa/.gitbook/assets/image (203).png b/fa/.gitbook/assets/image (203).png new file mode 100644 index 000000000..1b49eda87 Binary files /dev/null and b/fa/.gitbook/assets/image (203).png differ diff --git a/fa/.gitbook/assets/image (204).png b/fa/.gitbook/assets/image (204).png new file mode 100644 index 000000000..35d5a52d8 Binary files /dev/null and b/fa/.gitbook/assets/image (204).png differ diff --git a/fa/.gitbook/assets/image (205).png b/fa/.gitbook/assets/image (205).png new file mode 100644 index 000000000..38080669b Binary files /dev/null and b/fa/.gitbook/assets/image (205).png differ diff --git a/fa/.gitbook/assets/image (207).png b/fa/.gitbook/assets/image (207).png new file mode 100644 index 000000000..e27de94b3 Binary files /dev/null and b/fa/.gitbook/assets/image (207).png differ diff --git a/fa/.gitbook/assets/image (209).png b/fa/.gitbook/assets/image (209).png new file mode 100644 index 000000000..01263d674 Binary files /dev/null and b/fa/.gitbook/assets/image (209).png differ diff --git a/fa/.gitbook/assets/image (21) (1).png b/fa/.gitbook/assets/image (21) (1).png new file mode 100644 index 000000000..7403dbffb Binary files /dev/null and b/fa/.gitbook/assets/image (21) (1).png differ diff --git a/fa/.gitbook/assets/image (21).png b/fa/.gitbook/assets/image (21).png new file mode 100644 index 000000000..67f8a563b Binary files /dev/null and b/fa/.gitbook/assets/image (21).png differ diff --git a/fa/.gitbook/assets/image (210).png b/fa/.gitbook/assets/image (210).png new file mode 100644 index 000000000..99d9805b4 Binary files /dev/null and b/fa/.gitbook/assets/image (210).png differ diff --git a/fa/.gitbook/assets/image (211).png b/fa/.gitbook/assets/image (211).png new file mode 100644 index 000000000..f5ec63535 Binary files /dev/null and b/fa/.gitbook/assets/image (211).png differ diff --git a/fa/.gitbook/assets/image (213).png b/fa/.gitbook/assets/image (213).png new file mode 100644 index 000000000..5e95c80db Binary files /dev/null and b/fa/.gitbook/assets/image (213).png differ diff --git a/fa/.gitbook/assets/image (214).png b/fa/.gitbook/assets/image (214).png new file mode 100644 index 000000000..beff0e92f Binary files /dev/null and b/fa/.gitbook/assets/image (214).png differ diff --git a/fa/.gitbook/assets/image (22) (1).png b/fa/.gitbook/assets/image (22) (1).png new file mode 100644 index 000000000..cfb750cbf Binary files /dev/null and b/fa/.gitbook/assets/image (22) (1).png differ diff --git a/fa/.gitbook/assets/image (22).png b/fa/.gitbook/assets/image (22).png new file mode 100644 index 000000000..7a19aef3f Binary files /dev/null and b/fa/.gitbook/assets/image (22).png differ diff --git a/fa/.gitbook/assets/image (220).png b/fa/.gitbook/assets/image (220).png new file mode 100644 index 000000000..ab201b5a0 Binary files /dev/null and b/fa/.gitbook/assets/image (220).png differ diff --git a/fa/.gitbook/assets/image (221).png b/fa/.gitbook/assets/image (221).png new file mode 100644 index 000000000..2465d0735 Binary files /dev/null and b/fa/.gitbook/assets/image (221).png differ diff --git a/fa/.gitbook/assets/image (222).png b/fa/.gitbook/assets/image (222).png new file mode 100644 index 000000000..b0cae1688 Binary files /dev/null and b/fa/.gitbook/assets/image (222).png differ diff --git a/fa/.gitbook/assets/image (223).png b/fa/.gitbook/assets/image (223).png new file mode 100644 index 000000000..e9e968601 Binary files /dev/null and b/fa/.gitbook/assets/image (223).png differ diff --git a/fa/.gitbook/assets/image (225).png b/fa/.gitbook/assets/image (225).png new file mode 100644 index 000000000..98c907245 Binary files /dev/null and b/fa/.gitbook/assets/image (225).png differ diff --git a/fa/.gitbook/assets/image (226).png b/fa/.gitbook/assets/image (226).png new file mode 100644 index 000000000..fc4736404 Binary files /dev/null and b/fa/.gitbook/assets/image (226).png differ diff --git a/fa/.gitbook/assets/image (227).png b/fa/.gitbook/assets/image (227).png new file mode 100644 index 000000000..11d4ca10d Binary files /dev/null and b/fa/.gitbook/assets/image (227).png differ diff --git a/fa/.gitbook/assets/image (23) (1).png b/fa/.gitbook/assets/image (23) (1).png new file mode 100644 index 000000000..45c6b7d4f Binary files /dev/null and b/fa/.gitbook/assets/image (23) (1).png differ diff --git a/fa/.gitbook/assets/image (23).png b/fa/.gitbook/assets/image (23).png new file mode 100644 index 000000000..f59527de9 Binary files /dev/null and b/fa/.gitbook/assets/image (23).png differ diff --git a/fa/.gitbook/assets/image (231).png b/fa/.gitbook/assets/image (231).png new file mode 100644 index 000000000..522ece125 Binary files /dev/null and b/fa/.gitbook/assets/image (231).png differ diff --git a/fa/.gitbook/assets/image (232).png b/fa/.gitbook/assets/image (232).png new file mode 100644 index 000000000..42dd1b6ba Binary files /dev/null and b/fa/.gitbook/assets/image (232).png differ diff --git a/fa/.gitbook/assets/image (233).png b/fa/.gitbook/assets/image (233).png new file mode 100644 index 000000000..3620ab321 Binary files /dev/null and b/fa/.gitbook/assets/image (233).png differ diff --git a/fa/.gitbook/assets/image (236).png b/fa/.gitbook/assets/image (236).png new file mode 100644 index 000000000..944f750dc Binary files /dev/null and b/fa/.gitbook/assets/image (236).png differ diff --git a/fa/.gitbook/assets/image (237).png b/fa/.gitbook/assets/image (237).png new file mode 100644 index 000000000..762cd662e Binary files /dev/null and b/fa/.gitbook/assets/image (237).png differ diff --git a/fa/.gitbook/assets/image (24).png b/fa/.gitbook/assets/image (24).png new file mode 100644 index 000000000..6bc95abae Binary files /dev/null and b/fa/.gitbook/assets/image (24).png differ diff --git a/fa/.gitbook/assets/image (240).png b/fa/.gitbook/assets/image (240).png new file mode 100644 index 000000000..c25712c41 Binary files /dev/null and b/fa/.gitbook/assets/image (240).png differ diff --git a/fa/.gitbook/assets/image (241).png b/fa/.gitbook/assets/image (241).png new file mode 100644 index 000000000..f477dc5cb Binary files /dev/null and b/fa/.gitbook/assets/image (241).png differ diff --git a/fa/.gitbook/assets/image (242).png b/fa/.gitbook/assets/image (242).png new file mode 100644 index 000000000..5168b0057 Binary files /dev/null and b/fa/.gitbook/assets/image (242).png differ diff --git a/fa/.gitbook/assets/image (243).png b/fa/.gitbook/assets/image (243).png new file mode 100644 index 000000000..c267e84cc Binary files /dev/null and b/fa/.gitbook/assets/image (243).png differ diff --git a/fa/.gitbook/assets/image (245).png b/fa/.gitbook/assets/image (245).png new file mode 100644 index 000000000..de96ae06b Binary files /dev/null and b/fa/.gitbook/assets/image (245).png differ diff --git a/fa/.gitbook/assets/image (248).png b/fa/.gitbook/assets/image (248).png new file mode 100644 index 000000000..0fee7ffa6 Binary files /dev/null and b/fa/.gitbook/assets/image (248).png differ diff --git a/fa/.gitbook/assets/image (249) (1).png b/fa/.gitbook/assets/image (249) (1).png new file mode 100644 index 000000000..41f04536d Binary files /dev/null and b/fa/.gitbook/assets/image (249) (1).png differ diff --git a/fa/.gitbook/assets/image (249).png b/fa/.gitbook/assets/image (249).png new file mode 100644 index 000000000..41f04536d Binary files /dev/null and b/fa/.gitbook/assets/image (249).png differ diff --git a/fa/.gitbook/assets/image (25) (1).png b/fa/.gitbook/assets/image (25) (1).png new file mode 100644 index 000000000..a8c856ec5 Binary files /dev/null and b/fa/.gitbook/assets/image (25) (1).png differ diff --git a/fa/.gitbook/assets/image (25) (2).png b/fa/.gitbook/assets/image (25) (2).png new file mode 100644 index 000000000..a8c856ec5 Binary files /dev/null and b/fa/.gitbook/assets/image (25) (2).png differ diff --git a/fa/.gitbook/assets/image (25).png b/fa/.gitbook/assets/image (25).png new file mode 100644 index 000000000..446efd5c6 Binary files /dev/null and b/fa/.gitbook/assets/image (25).png differ diff --git a/fa/.gitbook/assets/image (251) (1).png b/fa/.gitbook/assets/image (251) (1).png new file mode 100644 index 000000000..cc42fb93a Binary files /dev/null and b/fa/.gitbook/assets/image (251) (1).png differ diff --git a/fa/.gitbook/assets/image (251).png b/fa/.gitbook/assets/image (251).png new file mode 100644 index 000000000..cc42fb93a Binary files /dev/null and b/fa/.gitbook/assets/image (251).png differ diff --git a/fa/.gitbook/assets/image (252) (1).png b/fa/.gitbook/assets/image (252) (1).png new file mode 100644 index 000000000..0d55c03d9 Binary files /dev/null and b/fa/.gitbook/assets/image (252) (1).png differ diff --git a/fa/.gitbook/assets/image (252).png b/fa/.gitbook/assets/image (252).png new file mode 100644 index 000000000..0d55c03d9 Binary files /dev/null and b/fa/.gitbook/assets/image (252).png differ diff --git a/fa/.gitbook/assets/image (253) (1).png b/fa/.gitbook/assets/image (253) (1).png new file mode 100644 index 000000000..bc8261c8d Binary files /dev/null and b/fa/.gitbook/assets/image (253) (1).png differ diff --git a/fa/.gitbook/assets/image (253).png b/fa/.gitbook/assets/image (253).png new file mode 100644 index 000000000..bc8261c8d Binary files /dev/null and b/fa/.gitbook/assets/image (253).png differ diff --git a/fa/.gitbook/assets/image (254) (1).png b/fa/.gitbook/assets/image (254) (1).png new file mode 100644 index 000000000..a13f34cca Binary files /dev/null and b/fa/.gitbook/assets/image (254) (1).png differ diff --git a/fa/.gitbook/assets/image (254).png b/fa/.gitbook/assets/image (254).png new file mode 100644 index 000000000..a13f34cca Binary files /dev/null and b/fa/.gitbook/assets/image (254).png differ diff --git a/fa/.gitbook/assets/image (255) (1).png b/fa/.gitbook/assets/image (255) (1).png new file mode 100644 index 000000000..faff54465 Binary files /dev/null and b/fa/.gitbook/assets/image (255) (1).png differ diff --git a/fa/.gitbook/assets/image (255).png b/fa/.gitbook/assets/image (255).png new file mode 100644 index 000000000..faff54465 Binary files /dev/null and b/fa/.gitbook/assets/image (255).png differ diff --git a/fa/.gitbook/assets/image (256) (1).png b/fa/.gitbook/assets/image (256) (1).png new file mode 100644 index 000000000..f05a3bde4 Binary files /dev/null and b/fa/.gitbook/assets/image (256) (1).png differ diff --git a/fa/.gitbook/assets/image (256).png b/fa/.gitbook/assets/image (256).png new file mode 100644 index 000000000..f05a3bde4 Binary files /dev/null and b/fa/.gitbook/assets/image (256).png differ diff --git a/fa/.gitbook/assets/image (257) (1).png b/fa/.gitbook/assets/image (257) (1).png new file mode 100644 index 000000000..3fc527a56 Binary files /dev/null and b/fa/.gitbook/assets/image (257) (1).png differ diff --git a/fa/.gitbook/assets/image (257).png b/fa/.gitbook/assets/image (257).png new file mode 100644 index 000000000..3fc527a56 Binary files /dev/null and b/fa/.gitbook/assets/image (257).png differ diff --git a/fa/.gitbook/assets/image (258) (1).png b/fa/.gitbook/assets/image (258) (1).png new file mode 100644 index 000000000..9aad12b5f Binary files /dev/null and b/fa/.gitbook/assets/image (258) (1).png differ diff --git a/fa/.gitbook/assets/image (258).png b/fa/.gitbook/assets/image (258).png new file mode 100644 index 000000000..9aad12b5f Binary files /dev/null and b/fa/.gitbook/assets/image (258).png differ diff --git a/fa/.gitbook/assets/image (259) (1).png b/fa/.gitbook/assets/image (259) (1).png new file mode 100644 index 000000000..4078ce320 Binary files /dev/null and b/fa/.gitbook/assets/image (259) (1).png differ diff --git a/fa/.gitbook/assets/image (259).png b/fa/.gitbook/assets/image (259).png new file mode 100644 index 000000000..4078ce320 Binary files /dev/null and b/fa/.gitbook/assets/image (259).png differ diff --git a/fa/.gitbook/assets/image (26) (1).png b/fa/.gitbook/assets/image (26) (1).png new file mode 100644 index 000000000..b06128fd7 Binary files /dev/null and b/fa/.gitbook/assets/image (26) (1).png differ diff --git a/fa/.gitbook/assets/image (26) (2).png b/fa/.gitbook/assets/image (26) (2).png new file mode 100644 index 000000000..b06128fd7 Binary files /dev/null and b/fa/.gitbook/assets/image (26) (2).png differ diff --git a/fa/.gitbook/assets/image (26) (3).png b/fa/.gitbook/assets/image (26) (3).png new file mode 100644 index 000000000..b06128fd7 Binary files /dev/null and b/fa/.gitbook/assets/image (26) (3).png differ diff --git a/fa/.gitbook/assets/image (26).png b/fa/.gitbook/assets/image (26).png new file mode 100644 index 000000000..54cc60aca Binary files /dev/null and b/fa/.gitbook/assets/image (26).png differ diff --git a/fa/.gitbook/assets/image (27) (1).png b/fa/.gitbook/assets/image (27) (1).png new file mode 100644 index 000000000..bfde71faa Binary files /dev/null and b/fa/.gitbook/assets/image (27) (1).png differ diff --git a/fa/.gitbook/assets/image (27).png b/fa/.gitbook/assets/image (27).png new file mode 100644 index 000000000..7f6b9b93b Binary files /dev/null and b/fa/.gitbook/assets/image (27).png differ diff --git a/fa/.gitbook/assets/image (28) (1).png b/fa/.gitbook/assets/image (28) (1).png new file mode 100644 index 000000000..165d029b7 Binary files /dev/null and b/fa/.gitbook/assets/image (28) (1).png differ diff --git a/fa/.gitbook/assets/image (28) (2).png b/fa/.gitbook/assets/image (28) (2).png new file mode 100644 index 000000000..165d029b7 Binary files /dev/null and b/fa/.gitbook/assets/image (28) (2).png differ diff --git a/fa/.gitbook/assets/image (28).png b/fa/.gitbook/assets/image (28).png new file mode 100644 index 000000000..5f29e168b Binary files /dev/null and b/fa/.gitbook/assets/image (28).png differ diff --git a/fa/.gitbook/assets/image (29) (1).png b/fa/.gitbook/assets/image (29) (1).png new file mode 100644 index 000000000..cd6f02726 Binary files /dev/null and b/fa/.gitbook/assets/image (29) (1).png differ diff --git a/fa/.gitbook/assets/image (29).png b/fa/.gitbook/assets/image (29).png new file mode 100644 index 000000000..ccaf73317 Binary files /dev/null and b/fa/.gitbook/assets/image (29).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..a23ad8f9b Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..cfc2125c3 Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (2).png b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (2).png new file mode 100644 index 000000000..a8bb8361e Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (2).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..f03320e44 Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..a8bb8361e Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (3) (1) (1) (1) (1).png new file mode 100644 index 000000000..0129d8cc0 Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1) (1).png b/fa/.gitbook/assets/image (3) (1) (1) (1).png new file mode 100644 index 000000000..b0946e1bf Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (1) (1).png b/fa/.gitbook/assets/image (3) (1) (1).png new file mode 100644 index 000000000..1bae2e5c8 Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (1).png b/fa/.gitbook/assets/image (3) (1).png new file mode 100644 index 000000000..a23ad8f9b Binary files /dev/null and b/fa/.gitbook/assets/image (3) (1).png differ diff --git a/fa/.gitbook/assets/image (3) (2).png b/fa/.gitbook/assets/image (3) (2).png new file mode 100644 index 000000000..f53e8c4cd Binary files /dev/null and b/fa/.gitbook/assets/image (3) (2).png differ diff --git a/fa/.gitbook/assets/image (3).png b/fa/.gitbook/assets/image (3).png new file mode 100644 index 000000000..9fcc6b1bf Binary files /dev/null and b/fa/.gitbook/assets/image (3).png differ diff --git a/fa/.gitbook/assets/image (30) (1).png b/fa/.gitbook/assets/image (30) (1).png new file mode 100644 index 000000000..13fa87764 Binary files /dev/null and b/fa/.gitbook/assets/image (30) (1).png differ diff --git a/fa/.gitbook/assets/image (30).png b/fa/.gitbook/assets/image (30).png new file mode 100644 index 000000000..3d8499071 Binary files /dev/null and b/fa/.gitbook/assets/image (30).png differ diff --git a/fa/.gitbook/assets/image (31) (1).png b/fa/.gitbook/assets/image (31) (1).png new file mode 100644 index 000000000..f85301d9e Binary files /dev/null and b/fa/.gitbook/assets/image (31) (1).png differ diff --git a/fa/.gitbook/assets/image (31).png b/fa/.gitbook/assets/image (31).png new file mode 100644 index 000000000..d32d9993a Binary files /dev/null and b/fa/.gitbook/assets/image (31).png differ diff --git a/fa/.gitbook/assets/image (32) (1).png b/fa/.gitbook/assets/image (32) (1).png new file mode 100644 index 000000000..edb14686c Binary files /dev/null and b/fa/.gitbook/assets/image (32) (1).png differ diff --git a/fa/.gitbook/assets/image (32).png b/fa/.gitbook/assets/image (32).png new file mode 100644 index 000000000..b0946e1bf Binary files /dev/null and b/fa/.gitbook/assets/image (32).png differ diff --git a/fa/.gitbook/assets/image (33) (1).png b/fa/.gitbook/assets/image (33) (1).png new file mode 100644 index 000000000..1bf35a93d Binary files /dev/null and b/fa/.gitbook/assets/image (33) (1).png differ diff --git a/fa/.gitbook/assets/image (33).png b/fa/.gitbook/assets/image (33).png new file mode 100644 index 000000000..a8bb8361e Binary files /dev/null and b/fa/.gitbook/assets/image (33).png differ diff --git a/fa/.gitbook/assets/image (34) (1).png b/fa/.gitbook/assets/image (34) (1).png new file mode 100644 index 000000000..63dc5b27c Binary files /dev/null and b/fa/.gitbook/assets/image (34) (1).png differ diff --git a/fa/.gitbook/assets/image (34) (2).png b/fa/.gitbook/assets/image (34) (2).png new file mode 100644 index 000000000..63dc5b27c Binary files /dev/null and b/fa/.gitbook/assets/image (34) (2).png differ diff --git a/fa/.gitbook/assets/image (34).png b/fa/.gitbook/assets/image (34).png new file mode 100644 index 000000000..4716396f2 Binary files /dev/null and b/fa/.gitbook/assets/image (34).png differ diff --git a/fa/.gitbook/assets/image (35) (1).png b/fa/.gitbook/assets/image (35) (1).png new file mode 100644 index 000000000..d23c1e393 Binary files /dev/null and b/fa/.gitbook/assets/image (35) (1).png differ diff --git a/fa/.gitbook/assets/image (35).png b/fa/.gitbook/assets/image (35).png new file mode 100644 index 000000000..77bece24a Binary files /dev/null and b/fa/.gitbook/assets/image (35).png differ diff --git a/fa/.gitbook/assets/image (36) (1).png b/fa/.gitbook/assets/image (36) (1).png new file mode 100644 index 000000000..c24e33de9 Binary files /dev/null and b/fa/.gitbook/assets/image (36) (1).png differ diff --git a/fa/.gitbook/assets/image (36) (2).png b/fa/.gitbook/assets/image (36) (2).png new file mode 100644 index 000000000..c24e33de9 Binary files /dev/null and b/fa/.gitbook/assets/image (36) (2).png differ diff --git a/fa/.gitbook/assets/image (36).png b/fa/.gitbook/assets/image (36).png new file mode 100644 index 000000000..5f5ac874c Binary files /dev/null and b/fa/.gitbook/assets/image (36).png differ diff --git a/fa/.gitbook/assets/image (37).png b/fa/.gitbook/assets/image (37).png new file mode 100644 index 000000000..7a19aef3f Binary files /dev/null and b/fa/.gitbook/assets/image (37).png differ diff --git a/fa/.gitbook/assets/image (38) (1).png b/fa/.gitbook/assets/image (38) (1).png new file mode 100644 index 000000000..988356034 Binary files /dev/null and b/fa/.gitbook/assets/image (38) (1).png differ diff --git a/fa/.gitbook/assets/image (38).png b/fa/.gitbook/assets/image (38).png new file mode 100644 index 000000000..f59527de9 Binary files /dev/null and b/fa/.gitbook/assets/image (38).png differ diff --git a/fa/.gitbook/assets/image (39) (1).png b/fa/.gitbook/assets/image (39) (1).png new file mode 100644 index 000000000..b4e0be6fc Binary files /dev/null and b/fa/.gitbook/assets/image (39) (1).png differ diff --git a/fa/.gitbook/assets/image (39) (2).png b/fa/.gitbook/assets/image (39) (2).png new file mode 100644 index 000000000..b4e0be6fc Binary files /dev/null and b/fa/.gitbook/assets/image (39) (2).png differ diff --git a/fa/.gitbook/assets/image (39).png b/fa/.gitbook/assets/image (39).png new file mode 100644 index 000000000..6bc95abae Binary files /dev/null and b/fa/.gitbook/assets/image (39).png differ diff --git a/fa/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..7260f11e1 Binary files /dev/null and b/fa/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (4) (1) (1).png b/fa/.gitbook/assets/image (4) (1) (1).png new file mode 100644 index 000000000..4716396f2 Binary files /dev/null and b/fa/.gitbook/assets/image (4) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (4) (1).png b/fa/.gitbook/assets/image (4) (1).png new file mode 100644 index 000000000..aab0a2418 Binary files /dev/null and b/fa/.gitbook/assets/image (4) (1).png differ diff --git a/fa/.gitbook/assets/image (4).png b/fa/.gitbook/assets/image (4).png new file mode 100644 index 000000000..d9a2868f7 Binary files /dev/null and b/fa/.gitbook/assets/image (4).png differ diff --git a/fa/.gitbook/assets/image (40) (1).png b/fa/.gitbook/assets/image (40) (1).png new file mode 100644 index 000000000..472d6e85e Binary files /dev/null and b/fa/.gitbook/assets/image (40) (1).png differ diff --git a/fa/.gitbook/assets/image (40) (2).png b/fa/.gitbook/assets/image (40) (2).png new file mode 100644 index 000000000..472d6e85e Binary files /dev/null and b/fa/.gitbook/assets/image (40) (2).png differ diff --git a/fa/.gitbook/assets/image (40).png b/fa/.gitbook/assets/image (40).png new file mode 100644 index 000000000..c422797fa Binary files /dev/null and b/fa/.gitbook/assets/image (40).png differ diff --git a/fa/.gitbook/assets/image (41) (1).png b/fa/.gitbook/assets/image (41) (1).png new file mode 100644 index 000000000..1b285bca6 Binary files /dev/null and b/fa/.gitbook/assets/image (41) (1).png differ diff --git a/fa/.gitbook/assets/image (41) (2).png b/fa/.gitbook/assets/image (41) (2).png new file mode 100644 index 000000000..1b285bca6 Binary files /dev/null and b/fa/.gitbook/assets/image (41) (2).png differ diff --git a/fa/.gitbook/assets/image (41).png b/fa/.gitbook/assets/image (41).png new file mode 100644 index 000000000..54cc60aca Binary files /dev/null and b/fa/.gitbook/assets/image (41).png differ diff --git a/fa/.gitbook/assets/image (42) (1).png b/fa/.gitbook/assets/image (42) (1).png new file mode 100644 index 000000000..46e504d2c Binary files /dev/null and b/fa/.gitbook/assets/image (42) (1).png differ diff --git a/fa/.gitbook/assets/image (42).png b/fa/.gitbook/assets/image (42).png new file mode 100644 index 000000000..7f6b9b93b Binary files /dev/null and b/fa/.gitbook/assets/image (42).png differ diff --git a/fa/.gitbook/assets/image (43) (1).png b/fa/.gitbook/assets/image (43) (1).png new file mode 100644 index 000000000..ece9b0133 Binary files /dev/null and b/fa/.gitbook/assets/image (43) (1).png differ diff --git a/fa/.gitbook/assets/image (43).png b/fa/.gitbook/assets/image (43).png new file mode 100644 index 000000000..1137fd83b Binary files /dev/null and b/fa/.gitbook/assets/image (43).png differ diff --git a/fa/.gitbook/assets/image (44).png b/fa/.gitbook/assets/image (44).png new file mode 100644 index 000000000..7255a2bb6 Binary files /dev/null and b/fa/.gitbook/assets/image (44).png differ diff --git a/fa/.gitbook/assets/image (45) (1).png b/fa/.gitbook/assets/image (45) (1).png new file mode 100644 index 000000000..41304c49e Binary files /dev/null and b/fa/.gitbook/assets/image (45) (1).png differ diff --git a/fa/.gitbook/assets/image (45).png b/fa/.gitbook/assets/image (45).png new file mode 100644 index 000000000..64e26f7df Binary files /dev/null and b/fa/.gitbook/assets/image (45).png differ diff --git a/fa/.gitbook/assets/image (46) (1).png b/fa/.gitbook/assets/image (46) (1).png new file mode 100644 index 000000000..63cd1e762 Binary files /dev/null and b/fa/.gitbook/assets/image (46) (1).png differ diff --git a/fa/.gitbook/assets/image (46).png b/fa/.gitbook/assets/image (46).png new file mode 100644 index 000000000..0bde3189d Binary files /dev/null and b/fa/.gitbook/assets/image (46).png differ diff --git a/fa/.gitbook/assets/image (47) (1).png b/fa/.gitbook/assets/image (47) (1).png new file mode 100644 index 000000000..c0c72136c Binary files /dev/null and b/fa/.gitbook/assets/image (47) (1).png differ diff --git a/fa/.gitbook/assets/image (47) (2).png b/fa/.gitbook/assets/image (47) (2).png new file mode 100644 index 000000000..c0c72136c Binary files /dev/null and b/fa/.gitbook/assets/image (47) (2).png differ diff --git a/fa/.gitbook/assets/image (47).png b/fa/.gitbook/assets/image (47).png new file mode 100644 index 000000000..47b215fda Binary files /dev/null and b/fa/.gitbook/assets/image (47).png differ diff --git a/fa/.gitbook/assets/image (48) (1).png b/fa/.gitbook/assets/image (48) (1).png new file mode 100644 index 000000000..421496ab8 Binary files /dev/null and b/fa/.gitbook/assets/image (48) (1).png differ diff --git a/fa/.gitbook/assets/image (48).png b/fa/.gitbook/assets/image (48).png new file mode 100644 index 000000000..1bae2e5c8 Binary files /dev/null and b/fa/.gitbook/assets/image (48).png differ diff --git a/fa/.gitbook/assets/image (49).png b/fa/.gitbook/assets/image (49).png new file mode 100644 index 000000000..e87f63f44 Binary files /dev/null and b/fa/.gitbook/assets/image (49).png differ diff --git a/fa/.gitbook/assets/image (5) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (5) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..bbeaaa87d Binary files /dev/null and b/fa/.gitbook/assets/image (5) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (5) (1) (1).png b/fa/.gitbook/assets/image (5) (1) (1).png new file mode 100644 index 000000000..67f8a563b Binary files /dev/null and b/fa/.gitbook/assets/image (5) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (5) (1).png b/fa/.gitbook/assets/image (5) (1).png new file mode 100644 index 000000000..ddfe5a6ed Binary files /dev/null and b/fa/.gitbook/assets/image (5) (1).png differ diff --git a/fa/.gitbook/assets/image (5) (2).png b/fa/.gitbook/assets/image (5) (2).png new file mode 100644 index 000000000..77bece24a Binary files /dev/null and b/fa/.gitbook/assets/image (5) (2).png differ diff --git a/fa/.gitbook/assets/image (5).png b/fa/.gitbook/assets/image (5).png new file mode 100644 index 000000000..0530c8803 Binary files /dev/null and b/fa/.gitbook/assets/image (5).png differ diff --git a/fa/.gitbook/assets/image (50) (1).png b/fa/.gitbook/assets/image (50) (1).png new file mode 100644 index 000000000..cfc68f54f Binary files /dev/null and b/fa/.gitbook/assets/image (50) (1).png differ diff --git a/fa/.gitbook/assets/image (50).png b/fa/.gitbook/assets/image (50).png new file mode 100644 index 000000000..8d93ac57f Binary files /dev/null and b/fa/.gitbook/assets/image (50).png differ diff --git a/fa/.gitbook/assets/image (51) (1).png b/fa/.gitbook/assets/image (51) (1).png new file mode 100644 index 000000000..c16201b59 Binary files /dev/null and b/fa/.gitbook/assets/image (51) (1).png differ diff --git a/fa/.gitbook/assets/image (51).png b/fa/.gitbook/assets/image (51).png new file mode 100644 index 000000000..b0946e1bf Binary files /dev/null and b/fa/.gitbook/assets/image (51).png differ diff --git a/fa/.gitbook/assets/image (52) (1).png b/fa/.gitbook/assets/image (52) (1).png new file mode 100644 index 000000000..4d91b1a37 Binary files /dev/null and b/fa/.gitbook/assets/image (52) (1).png differ diff --git a/fa/.gitbook/assets/image (52).png b/fa/.gitbook/assets/image (52).png new file mode 100644 index 000000000..6e846cecd Binary files /dev/null and b/fa/.gitbook/assets/image (52).png differ diff --git a/fa/.gitbook/assets/image (53) (1).png b/fa/.gitbook/assets/image (53) (1).png new file mode 100644 index 000000000..dbcb27db1 Binary files /dev/null and b/fa/.gitbook/assets/image (53) (1).png differ diff --git a/fa/.gitbook/assets/image (53) (2).png b/fa/.gitbook/assets/image (53) (2).png new file mode 100644 index 000000000..dbcb27db1 Binary files /dev/null and b/fa/.gitbook/assets/image (53) (2).png differ diff --git a/fa/.gitbook/assets/image (53).png b/fa/.gitbook/assets/image (53).png new file mode 100644 index 000000000..2e07e3189 Binary files /dev/null and b/fa/.gitbook/assets/image (53).png differ diff --git a/fa/.gitbook/assets/image (54) (1).png b/fa/.gitbook/assets/image (54) (1).png new file mode 100644 index 000000000..a945f99a4 Binary files /dev/null and b/fa/.gitbook/assets/image (54) (1).png differ diff --git a/fa/.gitbook/assets/image (54).png b/fa/.gitbook/assets/image (54).png new file mode 100644 index 000000000..f03320e44 Binary files /dev/null and b/fa/.gitbook/assets/image (54).png differ diff --git a/fa/.gitbook/assets/image (55) (1).png b/fa/.gitbook/assets/image (55) (1).png new file mode 100644 index 000000000..cad82e8fe Binary files /dev/null and b/fa/.gitbook/assets/image (55) (1).png differ diff --git a/fa/.gitbook/assets/image (55).png b/fa/.gitbook/assets/image (55).png new file mode 100644 index 000000000..96ee571cd Binary files /dev/null and b/fa/.gitbook/assets/image (55).png differ diff --git a/fa/.gitbook/assets/image (56) (1).png b/fa/.gitbook/assets/image (56) (1).png new file mode 100644 index 000000000..75ef2703f Binary files /dev/null and b/fa/.gitbook/assets/image (56) (1).png differ diff --git a/fa/.gitbook/assets/image (56) (2).png b/fa/.gitbook/assets/image (56) (2).png new file mode 100644 index 000000000..75ef2703f Binary files /dev/null and b/fa/.gitbook/assets/image (56) (2).png differ diff --git a/fa/.gitbook/assets/image (56).png b/fa/.gitbook/assets/image (56).png new file mode 100644 index 000000000..c0228e318 Binary files /dev/null and b/fa/.gitbook/assets/image (56).png differ diff --git a/fa/.gitbook/assets/image (57) (1).png b/fa/.gitbook/assets/image (57) (1).png new file mode 100644 index 000000000..43831ce88 Binary files /dev/null and b/fa/.gitbook/assets/image (57) (1).png differ diff --git a/fa/.gitbook/assets/image (57) (2).png b/fa/.gitbook/assets/image (57) (2).png new file mode 100644 index 000000000..43831ce88 Binary files /dev/null and b/fa/.gitbook/assets/image (57) (2).png differ diff --git a/fa/.gitbook/assets/image (57).png b/fa/.gitbook/assets/image (57).png new file mode 100644 index 000000000..d60d08457 Binary files /dev/null and b/fa/.gitbook/assets/image (57).png differ diff --git a/fa/.gitbook/assets/image (58) (1).png b/fa/.gitbook/assets/image (58) (1).png new file mode 100644 index 000000000..57664b773 Binary files /dev/null and b/fa/.gitbook/assets/image (58) (1).png differ diff --git a/fa/.gitbook/assets/image (58).png b/fa/.gitbook/assets/image (58).png new file mode 100644 index 000000000..cfc2125c3 Binary files /dev/null and b/fa/.gitbook/assets/image (58).png differ diff --git a/fa/.gitbook/assets/image (59).png b/fa/.gitbook/assets/image (59).png new file mode 100644 index 000000000..d30d2abf7 Binary files /dev/null and b/fa/.gitbook/assets/image (59).png differ diff --git a/fa/.gitbook/assets/image (6) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (6) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..78e015bb7 Binary files /dev/null and b/fa/.gitbook/assets/image (6) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (6) (1) (1) (1).png b/fa/.gitbook/assets/image (6) (1) (1) (1).png new file mode 100644 index 000000000..2de12b044 Binary files /dev/null and b/fa/.gitbook/assets/image (6) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (6) (1) (1).png b/fa/.gitbook/assets/image (6) (1) (1).png new file mode 100644 index 000000000..5f5ac874c Binary files /dev/null and b/fa/.gitbook/assets/image (6) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (6) (1).png b/fa/.gitbook/assets/image (6) (1).png new file mode 100644 index 000000000..2de12b044 Binary files /dev/null and b/fa/.gitbook/assets/image (6) (1).png differ diff --git a/fa/.gitbook/assets/image (6) (2).png b/fa/.gitbook/assets/image (6) (2).png new file mode 100644 index 000000000..6fbc0e8ec Binary files /dev/null and b/fa/.gitbook/assets/image (6) (2).png differ diff --git a/fa/.gitbook/assets/image (6).png b/fa/.gitbook/assets/image (6).png new file mode 100644 index 000000000..3d25110be Binary files /dev/null and b/fa/.gitbook/assets/image (6).png differ diff --git a/fa/.gitbook/assets/image (60).png b/fa/.gitbook/assets/image (60).png new file mode 100644 index 000000000..407fcbe62 Binary files /dev/null and b/fa/.gitbook/assets/image (60).png differ diff --git a/fa/.gitbook/assets/image (61).png b/fa/.gitbook/assets/image (61).png new file mode 100644 index 000000000..9355e1db6 Binary files /dev/null and b/fa/.gitbook/assets/image (61).png differ diff --git a/fa/.gitbook/assets/image (62).png b/fa/.gitbook/assets/image (62).png new file mode 100644 index 000000000..2609d5f10 Binary files /dev/null and b/fa/.gitbook/assets/image (62).png differ diff --git a/fa/.gitbook/assets/image (63) (1).png b/fa/.gitbook/assets/image (63) (1).png new file mode 100644 index 000000000..640e5aa11 Binary files /dev/null and b/fa/.gitbook/assets/image (63) (1).png differ diff --git a/fa/.gitbook/assets/image (63).png b/fa/.gitbook/assets/image (63).png new file mode 100644 index 000000000..640e5aa11 Binary files /dev/null and b/fa/.gitbook/assets/image (63).png differ diff --git a/fa/.gitbook/assets/image (64).png b/fa/.gitbook/assets/image (64).png new file mode 100644 index 000000000..e7c812c2a Binary files /dev/null and b/fa/.gitbook/assets/image (64).png differ diff --git a/fa/.gitbook/assets/image (65).png b/fa/.gitbook/assets/image (65).png new file mode 100644 index 000000000..fa3b65398 Binary files /dev/null and b/fa/.gitbook/assets/image (65).png differ diff --git a/fa/.gitbook/assets/image (66).png b/fa/.gitbook/assets/image (66).png new file mode 100644 index 000000000..3d098055f Binary files /dev/null and b/fa/.gitbook/assets/image (66).png differ diff --git a/fa/.gitbook/assets/image (67) (1).png b/fa/.gitbook/assets/image (67) (1).png new file mode 100644 index 000000000..7630887e9 Binary files /dev/null and b/fa/.gitbook/assets/image (67) (1).png differ diff --git a/fa/.gitbook/assets/image (67).png b/fa/.gitbook/assets/image (67).png new file mode 100644 index 000000000..7630887e9 Binary files /dev/null and b/fa/.gitbook/assets/image (67).png differ diff --git a/fa/.gitbook/assets/image (68).png b/fa/.gitbook/assets/image (68).png new file mode 100644 index 000000000..bb0081759 Binary files /dev/null and b/fa/.gitbook/assets/image (68).png differ diff --git a/fa/.gitbook/assets/image (69).png b/fa/.gitbook/assets/image (69).png new file mode 100644 index 000000000..bf08a9a0d Binary files /dev/null and b/fa/.gitbook/assets/image (69).png differ diff --git a/fa/.gitbook/assets/image (7) (1) (1).png b/fa/.gitbook/assets/image (7) (1) (1).png new file mode 100644 index 000000000..711c6d438 Binary files /dev/null and b/fa/.gitbook/assets/image (7) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (7) (1) (2).png b/fa/.gitbook/assets/image (7) (1) (2).png new file mode 100644 index 000000000..7a19aef3f Binary files /dev/null and b/fa/.gitbook/assets/image (7) (1) (2).png differ diff --git a/fa/.gitbook/assets/image (7) (1).png b/fa/.gitbook/assets/image (7) (1).png new file mode 100644 index 000000000..cc5d15746 Binary files /dev/null and b/fa/.gitbook/assets/image (7) (1).png differ diff --git a/fa/.gitbook/assets/image (7) (2).png b/fa/.gitbook/assets/image (7) (2).png new file mode 100644 index 000000000..6ebf8cc2c Binary files /dev/null and b/fa/.gitbook/assets/image (7) (2).png differ diff --git a/fa/.gitbook/assets/image (7).png b/fa/.gitbook/assets/image (7).png new file mode 100644 index 000000000..9caa2c499 Binary files /dev/null and b/fa/.gitbook/assets/image (7).png differ diff --git a/fa/.gitbook/assets/image (70) (1).png b/fa/.gitbook/assets/image (70) (1).png new file mode 100644 index 000000000..0e0787903 Binary files /dev/null and b/fa/.gitbook/assets/image (70) (1).png differ diff --git a/fa/.gitbook/assets/image (70).png b/fa/.gitbook/assets/image (70).png new file mode 100644 index 000000000..c6c01ed0a Binary files /dev/null and b/fa/.gitbook/assets/image (70).png differ diff --git a/fa/.gitbook/assets/image (71).png b/fa/.gitbook/assets/image (71).png new file mode 100644 index 000000000..6fa220cfc Binary files /dev/null and b/fa/.gitbook/assets/image (71).png differ diff --git a/fa/.gitbook/assets/image (72) (1).png b/fa/.gitbook/assets/image (72) (1).png new file mode 100644 index 000000000..376298761 Binary files /dev/null and b/fa/.gitbook/assets/image (72) (1).png differ diff --git a/fa/.gitbook/assets/image (72).png b/fa/.gitbook/assets/image (72).png new file mode 100644 index 000000000..376298761 Binary files /dev/null and b/fa/.gitbook/assets/image (72).png differ diff --git a/fa/.gitbook/assets/image (73) (1).png b/fa/.gitbook/assets/image (73) (1).png new file mode 100644 index 000000000..0e46b7bb1 Binary files /dev/null and b/fa/.gitbook/assets/image (73) (1).png differ diff --git a/fa/.gitbook/assets/image (73) (2).png b/fa/.gitbook/assets/image (73) (2).png new file mode 100644 index 000000000..0e46b7bb1 Binary files /dev/null and b/fa/.gitbook/assets/image (73) (2).png differ diff --git a/fa/.gitbook/assets/image (73).png b/fa/.gitbook/assets/image (73).png new file mode 100644 index 000000000..0e46b7bb1 Binary files /dev/null and b/fa/.gitbook/assets/image (73).png differ diff --git a/fa/.gitbook/assets/image (74).png b/fa/.gitbook/assets/image (74).png new file mode 100644 index 000000000..1fba4980d Binary files /dev/null and b/fa/.gitbook/assets/image (74).png differ diff --git a/fa/.gitbook/assets/image (75).png b/fa/.gitbook/assets/image (75).png new file mode 100644 index 000000000..357513b33 Binary files /dev/null and b/fa/.gitbook/assets/image (75).png differ diff --git a/fa/.gitbook/assets/image (76) (1).png b/fa/.gitbook/assets/image (76) (1).png new file mode 100644 index 000000000..87d1a9ffc Binary files /dev/null and b/fa/.gitbook/assets/image (76) (1).png differ diff --git a/fa/.gitbook/assets/image (76).png b/fa/.gitbook/assets/image (76).png new file mode 100644 index 000000000..87d1a9ffc Binary files /dev/null and b/fa/.gitbook/assets/image (76).png differ diff --git a/fa/.gitbook/assets/image (77) (1).png b/fa/.gitbook/assets/image (77) (1).png new file mode 100644 index 000000000..0ca666dba Binary files /dev/null and b/fa/.gitbook/assets/image (77) (1).png differ diff --git a/fa/.gitbook/assets/image (77).png b/fa/.gitbook/assets/image (77).png new file mode 100644 index 000000000..0ca666dba Binary files /dev/null and b/fa/.gitbook/assets/image (77).png differ diff --git a/fa/.gitbook/assets/image (78).png b/fa/.gitbook/assets/image (78).png new file mode 100644 index 000000000..95702f395 Binary files /dev/null and b/fa/.gitbook/assets/image (78).png differ diff --git a/fa/.gitbook/assets/image (79) (1).png b/fa/.gitbook/assets/image (79) (1).png new file mode 100644 index 000000000..a06e6bc8f Binary files /dev/null and b/fa/.gitbook/assets/image (79) (1).png differ diff --git a/fa/.gitbook/assets/image (79).png b/fa/.gitbook/assets/image (79).png new file mode 100644 index 000000000..a06e6bc8f Binary files /dev/null and b/fa/.gitbook/assets/image (79).png differ diff --git a/fa/.gitbook/assets/image (8) (1) (1) (1) (1).png b/fa/.gitbook/assets/image (8) (1) (1) (1) (1).png new file mode 100644 index 000000000..b6aeea571 Binary files /dev/null and b/fa/.gitbook/assets/image (8) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (8) (1) (1).png b/fa/.gitbook/assets/image (8) (1) (1).png new file mode 100644 index 000000000..fecf1d75f Binary files /dev/null and b/fa/.gitbook/assets/image (8) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (8) (1) (2).png b/fa/.gitbook/assets/image (8) (1) (2).png new file mode 100644 index 000000000..f59527de9 Binary files /dev/null and b/fa/.gitbook/assets/image (8) (1) (2).png differ diff --git a/fa/.gitbook/assets/image (8) (1).png b/fa/.gitbook/assets/image (8) (1).png new file mode 100644 index 000000000..362f260c2 Binary files /dev/null and b/fa/.gitbook/assets/image (8) (1).png differ diff --git a/fa/.gitbook/assets/image (8).png b/fa/.gitbook/assets/image (8).png new file mode 100644 index 000000000..6c99d7942 Binary files /dev/null and b/fa/.gitbook/assets/image (8).png differ diff --git a/fa/.gitbook/assets/image (80).png b/fa/.gitbook/assets/image (80).png new file mode 100644 index 000000000..69f815c41 Binary files /dev/null and b/fa/.gitbook/assets/image (80).png differ diff --git a/fa/.gitbook/assets/image (81).png b/fa/.gitbook/assets/image (81).png new file mode 100644 index 000000000..1fba4980d Binary files /dev/null and b/fa/.gitbook/assets/image (81).png differ diff --git a/fa/.gitbook/assets/image (82).png b/fa/.gitbook/assets/image (82).png new file mode 100644 index 000000000..dd1b1334e Binary files /dev/null and b/fa/.gitbook/assets/image (82).png differ diff --git a/fa/.gitbook/assets/image (83).png b/fa/.gitbook/assets/image (83).png new file mode 100644 index 000000000..4bfe23de0 Binary files /dev/null and b/fa/.gitbook/assets/image (83).png differ diff --git a/fa/.gitbook/assets/image (84).png b/fa/.gitbook/assets/image (84).png new file mode 100644 index 000000000..99d8e0f4e Binary files /dev/null and b/fa/.gitbook/assets/image (84).png differ diff --git a/fa/.gitbook/assets/image (85).png b/fa/.gitbook/assets/image (85).png new file mode 100644 index 000000000..71c56375f Binary files /dev/null and b/fa/.gitbook/assets/image (85).png differ diff --git a/fa/.gitbook/assets/image (86).png b/fa/.gitbook/assets/image (86).png new file mode 100644 index 000000000..52b6cebd7 Binary files /dev/null and b/fa/.gitbook/assets/image (86).png differ diff --git a/fa/.gitbook/assets/image (87).png b/fa/.gitbook/assets/image (87).png new file mode 100644 index 000000000..f9380eb7d Binary files /dev/null and b/fa/.gitbook/assets/image (87).png differ diff --git a/fa/.gitbook/assets/image (88).png b/fa/.gitbook/assets/image (88).png new file mode 100644 index 000000000..c16201b59 Binary files /dev/null and b/fa/.gitbook/assets/image (88).png differ diff --git a/fa/.gitbook/assets/image (89).png b/fa/.gitbook/assets/image (89).png new file mode 100644 index 000000000..a945f99a4 Binary files /dev/null and b/fa/.gitbook/assets/image (89).png differ diff --git a/fa/.gitbook/assets/image (9) (1) (1).png b/fa/.gitbook/assets/image (9) (1) (1).png new file mode 100644 index 000000000..0fa44bbd8 Binary files /dev/null and b/fa/.gitbook/assets/image (9) (1) (1).png differ diff --git a/fa/.gitbook/assets/image (9) (1).png b/fa/.gitbook/assets/image (9) (1).png new file mode 100644 index 000000000..0fa44bbd8 Binary files /dev/null and b/fa/.gitbook/assets/image (9) (1).png differ diff --git a/fa/.gitbook/assets/image (9) (2).png b/fa/.gitbook/assets/image (9) (2).png new file mode 100644 index 000000000..6bc95abae Binary files /dev/null and b/fa/.gitbook/assets/image (9) (2).png differ diff --git a/fa/.gitbook/assets/image (9).png b/fa/.gitbook/assets/image (9).png new file mode 100644 index 000000000..a86810ea4 Binary files /dev/null and b/fa/.gitbook/assets/image (9).png differ diff --git a/fa/.gitbook/assets/image (90).png b/fa/.gitbook/assets/image (90).png new file mode 100644 index 000000000..57664b773 Binary files /dev/null and b/fa/.gitbook/assets/image (90).png differ diff --git a/fa/.gitbook/assets/image (91).png b/fa/.gitbook/assets/image (91).png new file mode 100644 index 000000000..122307122 Binary files /dev/null and b/fa/.gitbook/assets/image (91).png differ diff --git a/fa/.gitbook/assets/image (92).png b/fa/.gitbook/assets/image (92).png new file mode 100644 index 000000000..93144c9ba Binary files /dev/null and b/fa/.gitbook/assets/image (92).png differ diff --git a/fa/.gitbook/assets/image (93).png b/fa/.gitbook/assets/image (93).png new file mode 100644 index 000000000..4702527f0 Binary files /dev/null and b/fa/.gitbook/assets/image (93).png differ diff --git a/fa/.gitbook/assets/image (94).png b/fa/.gitbook/assets/image (94).png new file mode 100644 index 000000000..c78be695c Binary files /dev/null and b/fa/.gitbook/assets/image (94).png differ diff --git a/fa/.gitbook/assets/image (95).png b/fa/.gitbook/assets/image (95).png new file mode 100644 index 000000000..d1ca464ca Binary files /dev/null and b/fa/.gitbook/assets/image (95).png differ diff --git a/fa/.gitbook/assets/image (96).png b/fa/.gitbook/assets/image (96).png new file mode 100644 index 000000000..6c26ca5ff Binary files /dev/null and b/fa/.gitbook/assets/image (96).png differ diff --git a/fa/.gitbook/assets/image (97).png b/fa/.gitbook/assets/image (97).png new file mode 100644 index 000000000..f91d4065e Binary files /dev/null and b/fa/.gitbook/assets/image (97).png differ diff --git a/fa/.gitbook/assets/image (98).png b/fa/.gitbook/assets/image (98).png new file mode 100644 index 000000000..37399940f Binary files /dev/null and b/fa/.gitbook/assets/image (98).png differ diff --git a/fa/.gitbook/assets/image (99).png b/fa/.gitbook/assets/image (99).png new file mode 100644 index 000000000..37399940f Binary files /dev/null and b/fa/.gitbook/assets/image (99).png differ diff --git a/fa/.gitbook/assets/image-20231210143654461 (1).png b/fa/.gitbook/assets/image-20231210143654461 (1).png new file mode 100644 index 000000000..f1c30158d Binary files /dev/null and b/fa/.gitbook/assets/image-20231210143654461 (1).png differ diff --git a/fa/.gitbook/assets/image-20231210143654461.png b/fa/.gitbook/assets/image-20231210143654461.png new file mode 100644 index 000000000..f1c30158d Binary files /dev/null and b/fa/.gitbook/assets/image-20231210143654461.png differ diff --git a/fa/.gitbook/assets/image-add-segment.png b/fa/.gitbook/assets/image-add-segment.png new file mode 100644 index 000000000..53c1ecc41 Binary files /dev/null and b/fa/.gitbook/assets/image-add-segment.png differ diff --git a/fa/.gitbook/assets/image-default-models (1).png b/fa/.gitbook/assets/image-default-models (1).png new file mode 100644 index 000000000..9440bce8f Binary files /dev/null and b/fa/.gitbook/assets/image-default-models (1).png differ diff --git a/fa/.gitbook/assets/image-default-models.png b/fa/.gitbook/assets/image-default-models.png new file mode 100644 index 000000000..9440bce8f Binary files /dev/null and b/fa/.gitbook/assets/image-default-models.png differ diff --git a/fa/.gitbook/assets/image.png b/fa/.gitbook/assets/image.png new file mode 100644 index 000000000..8a6e8d554 Binary files /dev/null and b/fa/.gitbook/assets/image.png differ diff --git a/fa/.gitbook/assets/integrate-knowledge-within-app.png b/fa/.gitbook/assets/integrate-knowledge-within-app.png new file mode 100644 index 000000000..df7c80da4 Binary files /dev/null and b/fa/.gitbook/assets/integrate-knowledge-within-app.png differ diff --git a/fa/.gitbook/assets/integrate-notion-1.png b/fa/.gitbook/assets/integrate-notion-1.png new file mode 100644 index 000000000..534d1e629 Binary files /dev/null and b/fa/.gitbook/assets/integrate-notion-1.png differ diff --git a/fa/.gitbook/assets/integrate-with-langsmith.png b/fa/.gitbook/assets/integrate-with-langsmith.png new file mode 100644 index 000000000..feddeae99 Binary files /dev/null and b/fa/.gitbook/assets/integrate-with-langsmith.png differ diff --git a/fa/.gitbook/assets/iteration-code-node-convert.png b/fa/.gitbook/assets/iteration-code-node-convert.png new file mode 100644 index 000000000..380d133e7 Binary files /dev/null and b/fa/.gitbook/assets/iteration-code-node-convert.png differ diff --git a/fa/.gitbook/assets/iteration-node-iteration-long-article-iteration-generator.png b/fa/.gitbook/assets/iteration-node-iteration-long-article-iteration-generator.png new file mode 100644 index 000000000..3041cfafe Binary files /dev/null and b/fa/.gitbook/assets/iteration-node-iteration-long-article-iteration-generator.png differ diff --git a/fa/.gitbook/assets/iteration-node-iteration-through-story-chapters.png b/fa/.gitbook/assets/iteration-node-iteration-through-story-chapters.png new file mode 100644 index 000000000..d399a2444 Binary files /dev/null and b/fa/.gitbook/assets/iteration-node-iteration-through-story-chapters.png differ diff --git a/fa/.gitbook/assets/keywords-content-moderation.png b/fa/.gitbook/assets/keywords-content-moderation.png new file mode 100644 index 000000000..52f61ee13 Binary files /dev/null and b/fa/.gitbook/assets/keywords-content-moderation.png differ diff --git a/fa/.gitbook/assets/knowledge-base-api-token.png b/fa/.gitbook/assets/knowledge-base-api-token.png new file mode 100644 index 000000000..e3e32b590 Binary files /dev/null and b/fa/.gitbook/assets/knowledge-base-api-token.png differ diff --git a/fa/.gitbook/assets/knowledge-base-api.png b/fa/.gitbook/assets/knowledge-base-api.png new file mode 100644 index 000000000..44d5b6a0a Binary files /dev/null and b/fa/.gitbook/assets/knowledge-base-api.png differ diff --git a/fa/.gitbook/assets/knowledge-base-custom-mode.png b/fa/.gitbook/assets/knowledge-base-custom-mode.png new file mode 100644 index 000000000..c8edd9ded Binary files /dev/null and b/fa/.gitbook/assets/knowledge-base-custom-mode.png differ diff --git a/fa/.gitbook/assets/knowledge-retrieval-1.png b/fa/.gitbook/assets/knowledge-retrieval-1.png new file mode 100644 index 000000000..0a97f3a00 Binary files /dev/null and b/fa/.gitbook/assets/knowledge-retrieval-1.png differ diff --git a/fa/.gitbook/assets/knowledge-retrieval-2.png b/fa/.gitbook/assets/knowledge-retrieval-2.png new file mode 100644 index 000000000..0205095bb Binary files /dev/null and b/fa/.gitbook/assets/knowledge-retrieval-2.png differ diff --git a/fa/.gitbook/assets/knowledge-retrieval.png b/fa/.gitbook/assets/knowledge-retrieval.png new file mode 100644 index 000000000..735c060bf Binary files /dev/null and b/fa/.gitbook/assets/knowledge-retrieval.png differ diff --git a/fa/.gitbook/assets/knowledge-settings-01.png b/fa/.gitbook/assets/knowledge-settings-01.png new file mode 100644 index 000000000..96cf076ba Binary files /dev/null and b/fa/.gitbook/assets/knowledge-settings-01.png differ diff --git a/fa/.gitbook/assets/language-variable-assigner.png b/fa/.gitbook/assets/language-variable-assigner.png new file mode 100644 index 000000000..a1b907777 Binary files /dev/null and b/fa/.gitbook/assets/language-variable-assigner.png differ diff --git a/fa/.gitbook/assets/learn-more-json-schema.png b/fa/.gitbook/assets/learn-more-json-schema.png new file mode 100644 index 000000000..91e6b957a Binary files /dev/null and b/fa/.gitbook/assets/learn-more-json-schema.png differ diff --git a/fa/.gitbook/assets/learn-more/WechatIMG157.jpg b/fa/.gitbook/assets/learn-more/WechatIMG157.jpg new file mode 100644 index 000000000..3bf8f2613 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/WechatIMG157.jpg differ diff --git a/fa/.gitbook/assets/learn-more/WechatIMG158.jpg b/fa/.gitbook/assets/learn-more/WechatIMG158.jpg new file mode 100644 index 000000000..43352b460 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/WechatIMG158.jpg differ diff --git a/fa/.gitbook/assets/learn-more/WechatIMG160.jpg b/fa/.gitbook/assets/learn-more/WechatIMG160.jpg new file mode 100644 index 000000000..1acdc82ed Binary files /dev/null and b/fa/.gitbook/assets/learn-more/WechatIMG160.jpg differ diff --git a/fa/.gitbook/assets/learn-more/WechatIMG38.jpg b/fa/.gitbook/assets/learn-more/WechatIMG38.jpg new file mode 100644 index 000000000..7aa8791e0 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/WechatIMG38.jpg differ diff --git a/fa/.gitbook/assets/learn-more/app-variables.png b/fa/.gitbook/assets/learn-more/app-variables.png new file mode 100644 index 000000000..ebd29640d Binary files /dev/null and b/fa/.gitbook/assets/learn-more/app-variables.png differ diff --git a/fa/.gitbook/assets/learn-more/create-app.png b/fa/.gitbook/assets/learn-more/create-app.png new file mode 100644 index 000000000..8f5c28cef Binary files /dev/null and b/fa/.gitbook/assets/learn-more/create-app.png differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/agent-on-wechat.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/agent-on-wechat.jpg new file mode 100644 index 000000000..2f5f99985 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/agent-on-wechat.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/agent-on-wework.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/agent-on-wework.jpg new file mode 100644 index 000000000..97d2cc036 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/agent-on-wework.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/basic-chatbot-on-wechat.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/basic-chatbot-on-wechat.jpg new file mode 100644 index 000000000..e16598039 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/basic-chatbot-on-wechat.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-add-dalle.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-add-dalle.jpg new file mode 100644 index 000000000..9d9ad418f Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-add-dalle.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-add-duck-calc.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-add-duck-calc.jpg new file mode 100644 index 000000000..bed7e96f3 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-add-duck-calc.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-auth-dalle.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-auth-dalle.jpg new file mode 100644 index 000000000..fc8543248 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-agent-auth-dalle.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/config-basic-chatbot.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-basic-chatbot.jpg new file mode 100644 index 000000000..d022d062f Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/config-basic-chatbot.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-agent.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-agent.jpg new file mode 100644 index 000000000..57c62cbdc Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-agent.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-basic-chatbot-apikey.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-basic-chatbot-apikey.jpg new file mode 100644 index 000000000..bd0d09dd2 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-basic-chatbot-apikey.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-basic-chatbot.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-basic-chatbot.jpg new file mode 100644 index 000000000..a191212ef Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-basic-chatbot.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-1.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-1.jpg new file mode 100644 index 000000000..2eb27ac01 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-1.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-2.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-2.jpg new file mode 100644 index 000000000..b344c4e53 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-2.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-3.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-3.jpg new file mode 100644 index 000000000..7fd904e30 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-3.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-4.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-4.jpg new file mode 100644 index 000000000..a501d213d Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-4.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-5.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-5.jpg new file mode 100644 index 000000000..819e24e46 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-knowledge-5.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-1.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-1.jpg new file mode 100644 index 000000000..7d0b27dae Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-1.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-2.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-2.jpg new file mode 100644 index 000000000..65e9a8ceb Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-2.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-3.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-3.jpg new file mode 100644 index 000000000..7f068204e Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-3.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-4.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-4.jpg new file mode 100644 index 000000000..197e17e62 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-4.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-5.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-5.jpg new file mode 100644 index 000000000..88270f324 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-5.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-6.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-6.jpg new file mode 100644 index 000000000..6573734af Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow-chatbot-6.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow.jpg new file mode 100644 index 000000000..6edce3e48 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/create-workflow.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/download-dify-workflow-knowledge.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/download-dify-workflow-knowledge.jpg new file mode 100644 index 000000000..90f46cc50 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/download-dify-workflow-knowledge.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/login.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/login.jpg new file mode 100644 index 000000000..40314cc53 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/login.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-agent.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-agent.jpg new file mode 100644 index 000000000..5d6727da6 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-agent.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-basic-chatbot.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-basic-chatbot.jpg new file mode 100644 index 000000000..608315bf8 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-basic-chatbot.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-workflow.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-workflow.jpg new file mode 100644 index 000000000..192d3aed7 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/publish-workflow.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/test-workflow.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/test-workflow.jpg new file mode 100644 index 000000000..d6c36857b Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/test-workflow.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/wechat-login.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/wechat-login.jpg new file mode 100644 index 000000000..ca9894256 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/wechat-login.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/workflow-chatbot-on-wechat.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/workflow-chatbot-on-wechat.jpg new file mode 100644 index 000000000..5920d7812 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/workflow-chatbot-on-wechat.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-wechat/workflow-on-wechat.jpg b/fa/.gitbook/assets/learn-more/dify-on-wechat/workflow-on-wechat.jpg new file mode 100644 index 000000000..c173784b5 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-wechat/workflow-on-wechat.jpg differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-whatsapp/lt1.png b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/lt1.png new file mode 100644 index 000000000..dad6bd240 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/lt1.png differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio1.png b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio1.png new file mode 100644 index 000000000..359541ad3 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio1.png differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio2.png b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio2.png new file mode 100644 index 000000000..83e77395b Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio2.png differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio3.png b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio3.png new file mode 100644 index 000000000..e4b8ee4aa Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/twilio3.png differ diff --git a/fa/.gitbook/assets/learn-more/dify-on-whatsapp/whatsapp1.jpg b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/whatsapp1.jpg new file mode 100644 index 000000000..27dd7e73d Binary files /dev/null and b/fa/.gitbook/assets/learn-more/dify-on-whatsapp/whatsapp1.jpg differ diff --git a/fa/.gitbook/assets/learn-more/image (19).png b/fa/.gitbook/assets/learn-more/image (19).png new file mode 100644 index 000000000..147eeff5b Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (19).png differ diff --git a/fa/.gitbook/assets/learn-more/image (25).png b/fa/.gitbook/assets/learn-more/image (25).png new file mode 100644 index 000000000..a8c856ec5 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (25).png differ diff --git a/fa/.gitbook/assets/learn-more/image (26).png b/fa/.gitbook/assets/learn-more/image (26).png new file mode 100644 index 000000000..b06128fd7 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (26).png differ diff --git a/fa/.gitbook/assets/learn-more/image (3) (1) (1) (1) (1) (1) (1).png b/fa/.gitbook/assets/learn-more/image (3) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..a8bb8361e Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (3) (1) (1) (1) (1) (1) (1).png differ diff --git a/fa/.gitbook/assets/learn-more/image (34).png b/fa/.gitbook/assets/learn-more/image (34).png new file mode 100644 index 000000000..63dc5b27c Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (34).png differ diff --git a/fa/.gitbook/assets/learn-more/image (40).png b/fa/.gitbook/assets/learn-more/image (40).png new file mode 100644 index 000000000..472d6e85e Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (40).png differ diff --git a/fa/.gitbook/assets/learn-more/image (41).png b/fa/.gitbook/assets/learn-more/image (41).png new file mode 100644 index 000000000..1b285bca6 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (41).png differ diff --git a/fa/.gitbook/assets/learn-more/image (53).png b/fa/.gitbook/assets/learn-more/image (53).png new file mode 100644 index 000000000..dbcb27db1 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (53).png differ diff --git a/fa/.gitbook/assets/learn-more/image (56).png b/fa/.gitbook/assets/learn-more/image (56).png new file mode 100644 index 000000000..75ef2703f Binary files /dev/null and b/fa/.gitbook/assets/learn-more/image (56).png differ diff --git a/fa/.gitbook/assets/learn-more/pre-prompt.png b/fa/.gitbook/assets/learn-more/pre-prompt.png new file mode 100644 index 000000000..aee298af0 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/pre-prompt.png differ diff --git a/fa/.gitbook/assets/learn-more/screenshot-20230802-114025.png b/fa/.gitbook/assets/learn-more/screenshot-20230802-114025.png new file mode 100644 index 000000000..311d12a3b Binary files /dev/null and b/fa/.gitbook/assets/learn-more/screenshot-20230802-114025.png differ diff --git a/fa/.gitbook/assets/learn-more/screenshot-20230802-141913.png b/fa/.gitbook/assets/learn-more/screenshot-20230802-141913.png new file mode 100644 index 000000000..0db07054a Binary files /dev/null and b/fa/.gitbook/assets/learn-more/screenshot-20230802-141913.png differ diff --git a/fa/.gitbook/assets/learn-more/screenshot-20230802-142407.png b/fa/.gitbook/assets/learn-more/screenshot-20230802-142407.png new file mode 100644 index 000000000..3276d98c8 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/screenshot-20230802-142407.png differ diff --git a/fa/.gitbook/assets/learn-more/screenshot-20230802-145326.png b/fa/.gitbook/assets/learn-more/screenshot-20230802-145326.png new file mode 100644 index 000000000..63250ec63 Binary files /dev/null and b/fa/.gitbook/assets/learn-more/screenshot-20230802-145326.png differ diff --git a/fa/.gitbook/assets/llm-node-1.png b/fa/.gitbook/assets/llm-node-1.png new file mode 100644 index 000000000..90c788ade Binary files /dev/null and b/fa/.gitbook/assets/llm-node-1.png differ diff --git a/fa/.gitbook/assets/llm-node-2.png b/fa/.gitbook/assets/llm-node-2.png new file mode 100644 index 000000000..76d7fdbd5 Binary files /dev/null and b/fa/.gitbook/assets/llm-node-2.png differ diff --git a/fa/.gitbook/assets/llm-node-3.png b/fa/.gitbook/assets/llm-node-3.png new file mode 100644 index 000000000..c9fcc7ff1 Binary files /dev/null and b/fa/.gitbook/assets/llm-node-3.png differ diff --git a/fa/.gitbook/assets/llm-node-4.png b/fa/.gitbook/assets/llm-node-4.png new file mode 100644 index 000000000..837c0dca7 Binary files /dev/null and b/fa/.gitbook/assets/llm-node-4.png differ diff --git a/fa/.gitbook/assets/load-balancing-1.png b/fa/.gitbook/assets/load-balancing-1.png new file mode 100644 index 000000000..0b112bf63 Binary files /dev/null and b/fa/.gitbook/assets/load-balancing-1.png differ diff --git a/fa/.gitbook/assets/load-balancing-2.png b/fa/.gitbook/assets/load-balancing-2.png new file mode 100644 index 000000000..32481177d Binary files /dev/null and b/fa/.gitbook/assets/load-balancing-2.png differ diff --git a/fa/.gitbook/assets/load-balancing-3.png b/fa/.gitbook/assets/load-balancing-3.png new file mode 100644 index 000000000..9f4ae231f Binary files /dev/null and b/fa/.gitbook/assets/load-balancing-3.png differ diff --git a/fa/.gitbook/assets/load-balancing-4.png b/fa/.gitbook/assets/load-balancing-4.png new file mode 100644 index 000000000..336fc0805 Binary files /dev/null and b/fa/.gitbook/assets/load-balancing-4.png differ diff --git a/fa/.gitbook/assets/load-balancing.png b/fa/.gitbook/assets/load-balancing.png new file mode 100644 index 000000000..cce83b863 Binary files /dev/null and b/fa/.gitbook/assets/load-balancing.png differ diff --git a/fa/.gitbook/assets/log (1).jpeg b/fa/.gitbook/assets/log (1).jpeg new file mode 100644 index 000000000..290c6c06c Binary files /dev/null and b/fa/.gitbook/assets/log (1).jpeg differ diff --git a/fa/.gitbook/assets/log.jpeg b/fa/.gitbook/assets/log.jpeg new file mode 100644 index 000000000..290c6c06c Binary files /dev/null and b/fa/.gitbook/assets/log.jpeg differ diff --git a/fa/.gitbook/assets/log1.png b/fa/.gitbook/assets/log1.png new file mode 100644 index 000000000..3714ead09 Binary files /dev/null and b/fa/.gitbook/assets/log1.png differ diff --git a/fa/.gitbook/assets/login-2.png b/fa/.gitbook/assets/login-2.png new file mode 100644 index 000000000..47fe47ab9 Binary files /dev/null and b/fa/.gitbook/assets/login-2.png differ diff --git a/fa/.gitbook/assets/logs-annotation-switch.png b/fa/.gitbook/assets/logs-annotation-switch.png new file mode 100644 index 000000000..26bc77e8c Binary files /dev/null and b/fa/.gitbook/assets/logs-annotation-switch.png differ diff --git a/fa/.gitbook/assets/logs-history.png b/fa/.gitbook/assets/logs-history.png new file mode 100644 index 000000000..7fd977334 Binary files /dev/null and b/fa/.gitbook/assets/logs-history.png differ diff --git a/fa/.gitbook/assets/long-article-iteration-generator.png b/fa/.gitbook/assets/long-article-iteration-generator.png new file mode 100644 index 000000000..4ff1cbe66 Binary files /dev/null and b/fa/.gitbook/assets/long-article-iteration-generator.png differ diff --git a/fa/.gitbook/assets/long-text-segments.png b/fa/.gitbook/assets/long-text-segments.png new file mode 100644 index 000000000..5c4408c54 Binary files /dev/null and b/fa/.gitbook/assets/long-text-segments.png differ diff --git a/fa/.gitbook/assets/metadata.png b/fa/.gitbook/assets/metadata.png new file mode 100644 index 000000000..c4d122041 Binary files /dev/null and b/fa/.gitbook/assets/metadata.png differ diff --git a/fa/.gitbook/assets/mj-prompt-bot-with-dify.png b/fa/.gitbook/assets/mj-prompt-bot-with-dify.png new file mode 100644 index 000000000..728841b76 Binary files /dev/null and b/fa/.gitbook/assets/mj-prompt-bot-with-dify.png differ diff --git a/fa/.gitbook/assets/model-provider-page.png b/fa/.gitbook/assets/model-provider-page.png new file mode 100644 index 000000000..4c76b4558 Binary files /dev/null and b/fa/.gitbook/assets/model-provider-page.png differ diff --git a/fa/.gitbook/assets/moderation-api-extension.png b/fa/.gitbook/assets/moderation-api-extension.png new file mode 100644 index 000000000..038af67b9 Binary files /dev/null and b/fa/.gitbook/assets/moderation-api-extension.png differ diff --git a/fa/.gitbook/assets/moderation2 (1).png b/fa/.gitbook/assets/moderation2 (1).png new file mode 100644 index 000000000..26819fdd3 Binary files /dev/null and b/fa/.gitbook/assets/moderation2 (1).png differ diff --git a/fa/.gitbook/assets/moderation2.png b/fa/.gitbook/assets/moderation2.png new file mode 100644 index 000000000..26819fdd3 Binary files /dev/null and b/fa/.gitbook/assets/moderation2.png differ diff --git a/fa/.gitbook/assets/moderation3 (1).png b/fa/.gitbook/assets/moderation3 (1).png new file mode 100644 index 000000000..82092ad53 Binary files /dev/null and b/fa/.gitbook/assets/moderation3 (1).png differ diff --git a/fa/.gitbook/assets/moderation3.png b/fa/.gitbook/assets/moderation3.png new file mode 100644 index 000000000..82092ad53 Binary files /dev/null and b/fa/.gitbook/assets/moderation3.png differ diff --git a/fa/.gitbook/assets/moderation4 (1).png b/fa/.gitbook/assets/moderation4 (1).png new file mode 100644 index 000000000..5c997a663 Binary files /dev/null and b/fa/.gitbook/assets/moderation4 (1).png differ diff --git a/fa/.gitbook/assets/moderation4.png b/fa/.gitbook/assets/moderation4.png new file mode 100644 index 000000000..5c997a663 Binary files /dev/null and b/fa/.gitbook/assets/moderation4.png differ diff --git a/fa/.gitbook/assets/modify-knowledge-base-settings.png b/fa/.gitbook/assets/modify-knowledge-base-settings.png new file mode 100644 index 000000000..4cd22f62a Binary files /dev/null and b/fa/.gitbook/assets/modify-knowledge-base-settings.png differ diff --git a/fa/.gitbook/assets/monitored-by-langfuse.png b/fa/.gitbook/assets/monitored-by-langfuse.png new file mode 100644 index 000000000..870f66da2 Binary files /dev/null and b/fa/.gitbook/assets/monitored-by-langfuse.png differ diff --git a/fa/.gitbook/assets/monitoring-app.png b/fa/.gitbook/assets/monitoring-app.png new file mode 100644 index 000000000..c80136ea4 Binary files /dev/null and b/fa/.gitbook/assets/monitoring-app.png differ diff --git a/fa/.gitbook/assets/monitoring-readme.png b/fa/.gitbook/assets/monitoring-readme.png new file mode 100644 index 000000000..0bde3189d Binary files /dev/null and b/fa/.gitbook/assets/monitoring-readme.png differ diff --git a/fa/.gitbook/assets/multiple-models-2.png b/fa/.gitbook/assets/multiple-models-2.png new file mode 100644 index 000000000..bb7d00d41 Binary files /dev/null and b/fa/.gitbook/assets/multiple-models-2.png differ diff --git a/fa/.gitbook/assets/multiple-models.png b/fa/.gitbook/assets/multiple-models.png new file mode 100644 index 000000000..68549d3af Binary files /dev/null and b/fa/.gitbook/assets/multiple-models.png differ diff --git a/fa/.gitbook/assets/mutliple-judgement (1).png b/fa/.gitbook/assets/mutliple-judgement (1).png new file mode 100644 index 000000000..0e2dc5290 Binary files /dev/null and b/fa/.gitbook/assets/mutliple-judgement (1).png differ diff --git a/fa/.gitbook/assets/mutliple-judgement.png b/fa/.gitbook/assets/mutliple-judgement.png new file mode 100644 index 000000000..cd231dfee Binary files /dev/null and b/fa/.gitbook/assets/mutliple-judgement.png differ diff --git a/fa/.gitbook/assets/notion-public-secret.png b/fa/.gitbook/assets/notion-public-secret.png new file mode 100644 index 000000000..24035bba0 Binary files /dev/null and b/fa/.gitbook/assets/notion-public-secret.png differ diff --git a/fa/.gitbook/assets/notion-secret.png b/fa/.gitbook/assets/notion-secret.png new file mode 100644 index 000000000..8c20eca39 Binary files /dev/null and b/fa/.gitbook/assets/notion-secret.png differ diff --git a/fa/.gitbook/assets/notion-speech-to-text.png b/fa/.gitbook/assets/notion-speech-to-text.png new file mode 100644 index 000000000..4d59a7e4c Binary files /dev/null and b/fa/.gitbook/assets/notion-speech-to-text.png differ diff --git a/fa/.gitbook/assets/ollama (1).png b/fa/.gitbook/assets/ollama (1).png new file mode 100644 index 000000000..8cd2cf1ed Binary files /dev/null and b/fa/.gitbook/assets/ollama (1).png differ diff --git a/fa/.gitbook/assets/ollama-config-en.png b/fa/.gitbook/assets/ollama-config-en.png new file mode 100644 index 000000000..351b275c8 Binary files /dev/null and b/fa/.gitbook/assets/ollama-config-en.png differ diff --git a/fa/.gitbook/assets/ollama-use-model-en.png b/fa/.gitbook/assets/ollama-use-model-en.png new file mode 100644 index 000000000..e10cf6d6c Binary files /dev/null and b/fa/.gitbook/assets/ollama-use-model-en.png differ diff --git a/fa/.gitbook/assets/ollama.png b/fa/.gitbook/assets/ollama.png new file mode 100644 index 000000000..8cd2cf1ed Binary files /dev/null and b/fa/.gitbook/assets/ollama.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-chatflow-multi-answer.png b/fa/.gitbook/assets/orchestrate-node-chatflow-multi-answer.png new file mode 100644 index 000000000..0ceb0311c Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-chatflow-multi-answer.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-conditional-branch-parallel.png b/fa/.gitbook/assets/orchestrate-node-conditional-branch-parallel.png new file mode 100644 index 000000000..0e8c67bd6 Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-conditional-branch-parallel.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-iteration-parallel.png b/fa/.gitbook/assets/orchestrate-node-iteration-parallel.png new file mode 100644 index 000000000..531f38bb2 Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-iteration-parallel.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-nested-parallel.png b/fa/.gitbook/assets/orchestrate-node-nested-parallel.png new file mode 100644 index 000000000..a95579533 Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-nested-parallel.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-parallel-design-method-1.png b/fa/.gitbook/assets/orchestrate-node-parallel-design-method-1.png new file mode 100644 index 000000000..376e7d237 Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-parallel-design-method-1.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-parallel-design-method-2.png b/fa/.gitbook/assets/orchestrate-node-parallel-design-method-2.png new file mode 100644 index 000000000..91d674541 Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-parallel-design-method-2.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-parallel-design-method-3.png b/fa/.gitbook/assets/orchestrate-node-parallel-design-method-3.png new file mode 100644 index 000000000..bf3f41dbd Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-parallel-design-method-3.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-parallel-logs.png b/fa/.gitbook/assets/orchestrate-node-parallel-logs.png new file mode 100644 index 000000000..d0d6c50fc Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-parallel-logs.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-serial-design.png b/fa/.gitbook/assets/orchestrate-node-serial-design.png new file mode 100644 index 000000000..fda8bd621 Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-serial-design.png differ diff --git a/fa/.gitbook/assets/orchestrate-node-simple-parallel.png b/fa/.gitbook/assets/orchestrate-node-simple-parallel.png new file mode 100644 index 000000000..6208ef240 Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node-simple-parallel.png differ diff --git a/fa/.gitbook/assets/orchestrate-node.jpeg b/fa/.gitbook/assets/orchestrate-node.jpeg new file mode 100644 index 000000000..11ce0cc0c Binary files /dev/null and b/fa/.gitbook/assets/orchestrate-node.jpeg differ diff --git a/fa/.gitbook/assets/output (1) (3).png b/fa/.gitbook/assets/output (1) (3).png new file mode 100644 index 000000000..c178f7b32 Binary files /dev/null and b/fa/.gitbook/assets/output (1) (3).png differ diff --git a/fa/.gitbook/assets/output (1) (5).png b/fa/.gitbook/assets/output (1) (5).png new file mode 100644 index 000000000..88b9958fd Binary files /dev/null and b/fa/.gitbook/assets/output (1) (5).png differ diff --git a/fa/.gitbook/assets/output (1) (6).png b/fa/.gitbook/assets/output (1) (6).png new file mode 100644 index 000000000..e64fb0276 Binary files /dev/null and b/fa/.gitbook/assets/output (1) (6).png differ diff --git a/fa/.gitbook/assets/output (1).png b/fa/.gitbook/assets/output (1).png new file mode 100644 index 000000000..181864597 Binary files /dev/null and b/fa/.gitbook/assets/output (1).png differ diff --git a/fa/.gitbook/assets/output (2) (1).png b/fa/.gitbook/assets/output (2) (1).png new file mode 100644 index 000000000..b408c8a4a Binary files /dev/null and b/fa/.gitbook/assets/output (2) (1).png differ diff --git a/fa/.gitbook/assets/output (2) (3).png b/fa/.gitbook/assets/output (2) (3).png new file mode 100644 index 000000000..cd4e6615b Binary files /dev/null and b/fa/.gitbook/assets/output (2) (3).png differ diff --git a/fa/.gitbook/assets/output (2) (4).png b/fa/.gitbook/assets/output (2) (4).png new file mode 100644 index 000000000..7755a722a Binary files /dev/null and b/fa/.gitbook/assets/output (2) (4).png differ diff --git a/fa/.gitbook/assets/output (2).png b/fa/.gitbook/assets/output (2).png new file mode 100644 index 000000000..6034f000a Binary files /dev/null and b/fa/.gitbook/assets/output (2).png differ diff --git a/fa/.gitbook/assets/output (3) (1).png b/fa/.gitbook/assets/output (3) (1).png new file mode 100644 index 000000000..27d243d6b Binary files /dev/null and b/fa/.gitbook/assets/output (3) (1).png differ diff --git a/fa/.gitbook/assets/output (3) (3).png b/fa/.gitbook/assets/output (3) (3).png new file mode 100644 index 000000000..b32d4cebb Binary files /dev/null and b/fa/.gitbook/assets/output (3) (3).png differ diff --git a/fa/.gitbook/assets/output (3) (4).png b/fa/.gitbook/assets/output (3) (4).png new file mode 100644 index 000000000..e1e9c7f3d Binary files /dev/null and b/fa/.gitbook/assets/output (3) (4).png differ diff --git a/fa/.gitbook/assets/output (3).png b/fa/.gitbook/assets/output (3).png new file mode 100644 index 000000000..41f63519d Binary files /dev/null and b/fa/.gitbook/assets/output (3).png differ diff --git a/fa/.gitbook/assets/output (4) (1).png b/fa/.gitbook/assets/output (4) (1).png new file mode 100644 index 000000000..0d295d932 Binary files /dev/null and b/fa/.gitbook/assets/output (4) (1).png differ diff --git a/fa/.gitbook/assets/output (4) (2).png b/fa/.gitbook/assets/output (4) (2).png new file mode 100644 index 000000000..bf6b384e3 Binary files /dev/null and b/fa/.gitbook/assets/output (4) (2).png differ diff --git a/fa/.gitbook/assets/output (4) (3).png b/fa/.gitbook/assets/output (4) (3).png new file mode 100644 index 000000000..ac78f47bc Binary files /dev/null and b/fa/.gitbook/assets/output (4) (3).png differ diff --git a/fa/.gitbook/assets/output (4).png b/fa/.gitbook/assets/output (4).png new file mode 100644 index 000000000..0d295d932 Binary files /dev/null and b/fa/.gitbook/assets/output (4).png differ diff --git a/fa/.gitbook/assets/output (5) (1).png b/fa/.gitbook/assets/output (5) (1).png new file mode 100644 index 000000000..ee08880ee Binary files /dev/null and b/fa/.gitbook/assets/output (5) (1).png differ diff --git a/fa/.gitbook/assets/output (5).png b/fa/.gitbook/assets/output (5).png new file mode 100644 index 000000000..3938faa1b Binary files /dev/null and b/fa/.gitbook/assets/output (5).png differ diff --git a/fa/.gitbook/assets/output (7).png b/fa/.gitbook/assets/output (7).png new file mode 100644 index 000000000..fffbac3b4 Binary files /dev/null and b/fa/.gitbook/assets/output (7).png differ diff --git a/fa/.gitbook/assets/output (8).png b/fa/.gitbook/assets/output (8).png new file mode 100644 index 000000000..f48cff1bf Binary files /dev/null and b/fa/.gitbook/assets/output (8).png differ diff --git a/fa/.gitbook/assets/output.png b/fa/.gitbook/assets/output.png new file mode 100644 index 000000000..3938faa1b Binary files /dev/null and b/fa/.gitbook/assets/output.png differ diff --git a/fa/.gitbook/assets/overview-data-analysis.png b/fa/.gitbook/assets/overview-data-analysis.png new file mode 100644 index 000000000..0f936e5c9 Binary files /dev/null and b/fa/.gitbook/assets/overview-data-analysis.png differ diff --git a/fa/.gitbook/assets/personal-account-management-01.png b/fa/.gitbook/assets/personal-account-management-01.png new file mode 100644 index 000000000..dc92514ec Binary files /dev/null and b/fa/.gitbook/assets/personal-account-management-01.png differ diff --git a/fa/.gitbook/assets/personal-account-management-02.png b/fa/.gitbook/assets/personal-account-management-02.png new file mode 100644 index 000000000..c08cd3f8f Binary files /dev/null and b/fa/.gitbook/assets/personal-account-management-02.png differ diff --git a/fa/.gitbook/assets/pin-delete-chat.png b/fa/.gitbook/assets/pin-delete-chat.png new file mode 100644 index 000000000..a162c0be6 Binary files /dev/null and b/fa/.gitbook/assets/pin-delete-chat.png differ diff --git a/fa/.gitbook/assets/pre-prompt.png b/fa/.gitbook/assets/pre-prompt.png new file mode 100644 index 000000000..aee298af0 Binary files /dev/null and b/fa/.gitbook/assets/pre-prompt.png differ diff --git a/fa/.gitbook/assets/precise-query.png b/fa/.gitbook/assets/precise-query.png new file mode 100644 index 000000000..252b06401 Binary files /dev/null and b/fa/.gitbook/assets/precise-query.png differ diff --git a/fa/.gitbook/assets/prompt-gen-1-en.png b/fa/.gitbook/assets/prompt-gen-1-en.png new file mode 100644 index 000000000..8b97a401b Binary files /dev/null and b/fa/.gitbook/assets/prompt-gen-1-en.png differ diff --git a/fa/.gitbook/assets/prompt-gen-2-en.png b/fa/.gitbook/assets/prompt-gen-2-en.png new file mode 100644 index 000000000..6e33068b0 Binary files /dev/null and b/fa/.gitbook/assets/prompt-gen-2-en.png differ diff --git a/fa/.gitbook/assets/public-integration.png b/fa/.gitbook/assets/public-integration.png new file mode 100644 index 000000000..6ea5c6140 Binary files /dev/null and b/fa/.gitbook/assets/public-integration.png differ diff --git a/fa/.gitbook/assets/q2p-and-q2q.png b/fa/.gitbook/assets/q2p-and-q2q.png new file mode 100644 index 000000000..b701715e3 Binary files /dev/null and b/fa/.gitbook/assets/q2p-and-q2q.png differ diff --git a/fa/.gitbook/assets/question-classifier-1.png b/fa/.gitbook/assets/question-classifier-1.png new file mode 100644 index 000000000..7eb757071 Binary files /dev/null and b/fa/.gitbook/assets/question-classifier-1.png differ diff --git a/fa/.gitbook/assets/question-classifier-scenarios.png b/fa/.gitbook/assets/question-classifier-scenarios.png new file mode 100644 index 000000000..ea5c30c44 Binary files /dev/null and b/fa/.gitbook/assets/question-classifier-scenarios.png differ diff --git a/fa/.gitbook/assets/recall-test-setting.png b/fa/.gitbook/assets/recall-test-setting.png new file mode 100644 index 000000000..74e23a48b Binary files /dev/null and b/fa/.gitbook/assets/recall-test-setting.png differ diff --git a/fa/.gitbook/assets/recall-test.png b/fa/.gitbook/assets/recall-test.png new file mode 100644 index 000000000..847ca13db Binary files /dev/null and b/fa/.gitbook/assets/recall-test.png differ diff --git a/fa/.gitbook/assets/replicate-version.png b/fa/.gitbook/assets/replicate-version.png new file mode 100644 index 000000000..47df9c32d Binary files /dev/null and b/fa/.gitbook/assets/replicate-version.png differ diff --git a/fa/.gitbook/assets/rerank-flow-chart.png b/fa/.gitbook/assets/rerank-flow-chart.png new file mode 100644 index 000000000..f58cf247f Binary files /dev/null and b/fa/.gitbook/assets/rerank-flow-chart.png differ diff --git a/fa/.gitbook/assets/screenshot-20230802-114025.png b/fa/.gitbook/assets/screenshot-20230802-114025.png new file mode 100644 index 000000000..311d12a3b Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20230802-114025.png differ diff --git a/fa/.gitbook/assets/screenshot-20230802-141913.png b/fa/.gitbook/assets/screenshot-20230802-141913.png new file mode 100644 index 000000000..0db07054a Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20230802-141913.png differ diff --git a/fa/.gitbook/assets/screenshot-20230802-142407.png b/fa/.gitbook/assets/screenshot-20230802-142407.png new file mode 100644 index 000000000..3276d98c8 Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20230802-142407.png differ diff --git a/fa/.gitbook/assets/screenshot-20230802-145326.png b/fa/.gitbook/assets/screenshot-20230802-145326.png new file mode 100644 index 000000000..63250ec63 Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20230802-145326.png differ diff --git a/fa/.gitbook/assets/screenshot-20231017-092613 (1).png b/fa/.gitbook/assets/screenshot-20231017-092613 (1).png new file mode 100644 index 000000000..43bd4f7fb Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20231017-092613 (1).png differ diff --git a/fa/.gitbook/assets/screenshot-20231017-092613.png b/fa/.gitbook/assets/screenshot-20231017-092613.png new file mode 100644 index 000000000..43bd4f7fb Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20231017-092613.png differ diff --git a/fa/.gitbook/assets/screenshot-20231017-092957.png b/fa/.gitbook/assets/screenshot-20231017-092957.png new file mode 100644 index 000000000..454a22bfa Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20231017-092957.png differ diff --git a/fa/.gitbook/assets/screenshot-20231128-104353 (1).png b/fa/.gitbook/assets/screenshot-20231128-104353 (1).png new file mode 100644 index 000000000..cf9c94d56 Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20231128-104353 (1).png differ diff --git a/fa/.gitbook/assets/screenshot-20231128-104353 (2).png b/fa/.gitbook/assets/screenshot-20231128-104353 (2).png new file mode 100644 index 000000000..cf9c94d56 Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20231128-104353 (2).png differ diff --git a/fa/.gitbook/assets/screenshot-20231128-104353.png b/fa/.gitbook/assets/screenshot-20231128-104353.png new file mode 100644 index 000000000..cf9c94d56 Binary files /dev/null and b/fa/.gitbook/assets/screenshot-20231128-104353.png differ diff --git a/fa/.gitbook/assets/select-model-deploy.png b/fa/.gitbook/assets/select-model-deploy.png new file mode 100644 index 000000000..d30d2abf7 Binary files /dev/null and b/fa/.gitbook/assets/select-model-deploy.png differ diff --git a/fa/.gitbook/assets/semantic-truncation.png b/fa/.gitbook/assets/semantic-truncation.png new file mode 100644 index 000000000..7b0defae9 Binary files /dev/null and b/fa/.gitbook/assets/semantic-truncation.png differ diff --git a/fa/.gitbook/assets/set-up-replicate.png b/fa/.gitbook/assets/set-up-replicate.png new file mode 100644 index 000000000..0ef5f7513 Binary files /dev/null and b/fa/.gitbook/assets/set-up-replicate.png differ diff --git a/fa/.gitbook/assets/setting-parameters-for-annotated-replies.png b/fa/.gitbook/assets/setting-parameters-for-annotated-replies.png new file mode 100644 index 000000000..6df72ab46 Binary files /dev/null and b/fa/.gitbook/assets/setting-parameters-for-annotated-replies.png differ diff --git a/fa/.gitbook/assets/setting-rerank-multipath.png b/fa/.gitbook/assets/setting-rerank-multipath.png new file mode 100644 index 000000000..4874bedd8 Binary files /dev/null and b/fa/.gitbook/assets/setting-rerank-multipath.png differ diff --git a/fa/.gitbook/assets/short-text-segments.png b/fa/.gitbook/assets/short-text-segments.png new file mode 100644 index 000000000..f834a2eb0 Binary files /dev/null and b/fa/.gitbook/assets/short-text-segments.png differ diff --git a/fa/.gitbook/assets/shortcut.png b/fa/.gitbook/assets/shortcut.png new file mode 100644 index 000000000..70b5f62ae Binary files /dev/null and b/fa/.gitbook/assets/shortcut.png differ diff --git a/fa/.gitbook/assets/single-path-execution.png b/fa/.gitbook/assets/single-path-execution.png new file mode 100644 index 000000000..9deec5b60 Binary files /dev/null and b/fa/.gitbook/assets/single-path-execution.png differ diff --git a/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_8EgAgdMcArHAaJJFEEWA_ngrock copy.jpg b/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_8EgAgdMcArHAaJJFEEWA_ngrock copy.jpg new file mode 100644 index 000000000..a759113a8 Binary files /dev/null and b/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_8EgAgdMcArHAaJJFEEWA_ngrock copy.jpg differ diff --git a/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_Z1SpULkGZ0xDBnSXOhC1_8000.webp b/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_Z1SpULkGZ0xDBnSXOhC1_8000.webp new file mode 100644 index 000000000..fcb794cc0 Binary files /dev/null and b/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_Z1SpULkGZ0xDBnSXOhC1_8000.webp differ diff --git a/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_kLpE7vN8jg1KrzeCWZtn_download.webp b/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_kLpE7vN8jg1KrzeCWZtn_download.webp new file mode 100644 index 000000000..174eabdfa Binary files /dev/null and b/fa/.gitbook/assets/spaces_CdDIVDY6AtAz028MFT4d_uploads_kLpE7vN8jg1KrzeCWZtn_download.webp differ diff --git a/fa/.gitbook/assets/start-node.png b/fa/.gitbook/assets/start-node.png new file mode 100644 index 000000000..f6316dc7f Binary files /dev/null and b/fa/.gitbook/assets/start-node.png differ diff --git a/fa/.gitbook/assets/subscription-management-01.png b/fa/.gitbook/assets/subscription-management-01.png new file mode 100644 index 000000000..0d713633a Binary files /dev/null and b/fa/.gitbook/assets/subscription-management-01.png differ diff --git a/fa/.gitbook/assets/subscription-management-02.jpeg b/fa/.gitbook/assets/subscription-management-02.jpeg new file mode 100644 index 000000000..5e6b9a707 Binary files /dev/null and b/fa/.gitbook/assets/subscription-management-02.jpeg differ diff --git a/fa/.gitbook/assets/sync-notion (1).png b/fa/.gitbook/assets/sync-notion (1).png new file mode 100644 index 000000000..a7c388c96 Binary files /dev/null and b/fa/.gitbook/assets/sync-notion (1).png differ diff --git a/fa/.gitbook/assets/sync-notion.png b/fa/.gitbook/assets/sync-notion.png new file mode 100644 index 000000000..fdb788eae Binary files /dev/null and b/fa/.gitbook/assets/sync-notion.png differ diff --git a/fa/.gitbook/assets/team-members-management-01.png b/fa/.gitbook/assets/team-members-management-01.png new file mode 100644 index 000000000..9590935b2 Binary files /dev/null and b/fa/.gitbook/assets/team-members-management-01.png differ diff --git a/fa/.gitbook/assets/team-members-management-02.png b/fa/.gitbook/assets/team-members-management-02.png new file mode 100644 index 000000000..c8fc3e3ee Binary files /dev/null and b/fa/.gitbook/assets/team-members-management-02.png differ diff --git a/fa/.gitbook/assets/text-generator-batch.png b/fa/.gitbook/assets/text-generator-batch.png new file mode 100644 index 000000000..65da1ad94 Binary files /dev/null and b/fa/.gitbook/assets/text-generator-batch.png differ diff --git a/fa/.gitbook/assets/text-generator-more-like-this.png b/fa/.gitbook/assets/text-generator-more-like-this.png new file mode 100644 index 000000000..0dc6f5b5d Binary files /dev/null and b/fa/.gitbook/assets/text-generator-more-like-this.png differ diff --git a/fa/.gitbook/assets/text-generator-saved.png b/fa/.gitbook/assets/text-generator-saved.png new file mode 100644 index 000000000..ee595aa7a Binary files /dev/null and b/fa/.gitbook/assets/text-generator-saved.png differ diff --git a/fa/.gitbook/assets/text-generator.png b/fa/.gitbook/assets/text-generator.png new file mode 100644 index 000000000..1cbfecf04 Binary files /dev/null and b/fa/.gitbook/assets/text-generator.png differ diff --git a/fa/.gitbook/assets/tool-searchapi-flow.png b/fa/.gitbook/assets/tool-searchapi-flow.png new file mode 100644 index 000000000..273f9abbe Binary files /dev/null and b/fa/.gitbook/assets/tool-searchapi-flow.png differ diff --git a/fa/.gitbook/assets/tool-searchapi.png b/fa/.gitbook/assets/tool-searchapi.png new file mode 100644 index 000000000..e90c2ed34 Binary files /dev/null and b/fa/.gitbook/assets/tool-searchapi.png differ diff --git a/fa/.gitbook/assets/tool-serper.png b/fa/.gitbook/assets/tool-serper.png new file mode 100644 index 000000000..5030e66a9 Binary files /dev/null and b/fa/.gitbook/assets/tool-serper.png differ diff --git a/fa/.gitbook/assets/tools-agent-perplexity.png b/fa/.gitbook/assets/tools-agent-perplexity.png new file mode 100644 index 000000000..d56fc623b Binary files /dev/null and b/fa/.gitbook/assets/tools-agent-perplexity.png differ diff --git a/fa/.gitbook/assets/tools-bing.png b/fa/.gitbook/assets/tools-bing.png new file mode 100644 index 000000000..64569849c Binary files /dev/null and b/fa/.gitbook/assets/tools-bing.png differ diff --git a/fa/.gitbook/assets/tools-chatflow-perplexity.png b/fa/.gitbook/assets/tools-chatflow-perplexity.png new file mode 100644 index 000000000..65ddfbebf Binary files /dev/null and b/fa/.gitbook/assets/tools-chatflow-perplexity.png differ diff --git a/fa/.gitbook/assets/tools-dalle.png b/fa/.gitbook/assets/tools-dalle.png new file mode 100644 index 000000000..bd3b03723 Binary files /dev/null and b/fa/.gitbook/assets/tools-dalle.png differ diff --git a/fa/.gitbook/assets/tools-google.png b/fa/.gitbook/assets/tools-google.png new file mode 100644 index 000000000..db0543840 Binary files /dev/null and b/fa/.gitbook/assets/tools-google.png differ diff --git a/fa/.gitbook/assets/tools-perplexity.png b/fa/.gitbook/assets/tools-perplexity.png new file mode 100644 index 000000000..a0799f53f Binary files /dev/null and b/fa/.gitbook/assets/tools-perplexity.png differ diff --git a/fa/.gitbook/assets/tracing-app-performance-langfuse.png b/fa/.gitbook/assets/tracing-app-performance-langfuse.png new file mode 100644 index 000000000..b72e07ebb Binary files /dev/null and b/fa/.gitbook/assets/tracing-app-performance-langfuse.png differ diff --git a/fa/.gitbook/assets/tracing-app-performance.png b/fa/.gitbook/assets/tracing-app-performance.png new file mode 100644 index 000000000..156be7a15 Binary files /dev/null and b/fa/.gitbook/assets/tracing-app-performance.png differ diff --git a/fa/.gitbook/assets/train-1.png b/fa/.gitbook/assets/train-1.png new file mode 100644 index 000000000..30fb0c7b7 Binary files /dev/null and b/fa/.gitbook/assets/train-1.png differ diff --git a/fa/.gitbook/assets/train-2.png b/fa/.gitbook/assets/train-2.png new file mode 100644 index 000000000..937b16d8c Binary files /dev/null and b/fa/.gitbook/assets/train-2.png differ diff --git a/fa/.gitbook/assets/train-3.png b/fa/.gitbook/assets/train-3.png new file mode 100644 index 000000000..612967172 Binary files /dev/null and b/fa/.gitbook/assets/train-3.png differ diff --git a/fa/.gitbook/assets/use-model-in-dify.png b/fa/.gitbook/assets/use-model-in-dify.png new file mode 100644 index 000000000..4247796c7 Binary files /dev/null and b/fa/.gitbook/assets/use-model-in-dify.png differ diff --git a/fa/.gitbook/assets/use-tools-in-app.png b/fa/.gitbook/assets/use-tools-in-app.png new file mode 100644 index 000000000..2c902e08d Binary files /dev/null and b/fa/.gitbook/assets/use-tools-in-app.png differ diff --git a/fa/.gitbook/assets/using-api-2.png b/fa/.gitbook/assets/using-api-2.png new file mode 100644 index 000000000..adc82453d Binary files /dev/null and b/fa/.gitbook/assets/using-api-2.png differ diff --git a/fa/.gitbook/assets/using-api-3.png b/fa/.gitbook/assets/using-api-3.png new file mode 100644 index 000000000..c30d22827 Binary files /dev/null and b/fa/.gitbook/assets/using-api-3.png differ diff --git a/fa/.gitbook/assets/using-api-4.png b/fa/.gitbook/assets/using-api-4.png new file mode 100644 index 000000000..3acd0a8c7 Binary files /dev/null and b/fa/.gitbook/assets/using-api-4.png differ diff --git a/fa/.gitbook/assets/using-api-5.png b/fa/.gitbook/assets/using-api-5.png new file mode 100644 index 000000000..249c6d26f Binary files /dev/null and b/fa/.gitbook/assets/using-api-5.png differ diff --git a/fa/.gitbook/assets/variable-aggregation.png b/fa/.gitbook/assets/variable-aggregation.png new file mode 100644 index 000000000..3ce9cf08d Binary files /dev/null and b/fa/.gitbook/assets/variable-aggregation.png differ diff --git a/fa/.gitbook/assets/variable-assigner.png b/fa/.gitbook/assets/variable-assigner.png new file mode 100644 index 000000000..a00c14dca Binary files /dev/null and b/fa/.gitbook/assets/variable-assigner.png differ diff --git a/fa/.gitbook/assets/vector-search.png b/fa/.gitbook/assets/vector-search.png new file mode 100644 index 000000000..f38b5a6da Binary files /dev/null and b/fa/.gitbook/assets/vector-search.png differ diff --git a/fa/.gitbook/assets/view-annotation-hit-history.png b/fa/.gitbook/assets/view-annotation-hit-history.png new file mode 100644 index 000000000..02e2b0c72 Binary files /dev/null and b/fa/.gitbook/assets/view-annotation-hit-history.png differ diff --git a/fa/.gitbook/assets/view-citation-informatio.png b/fa/.gitbook/assets/view-citation-informatio.png new file mode 100644 index 000000000..0cce1b47a Binary files /dev/null and b/fa/.gitbook/assets/view-citation-informatio.png differ diff --git a/fa/.gitbook/assets/view-citation.png b/fa/.gitbook/assets/view-citation.png new file mode 100644 index 000000000..8abf43230 Binary files /dev/null and b/fa/.gitbook/assets/view-citation.png differ diff --git a/fa/.gitbook/assets/view-traces-in-langfuse.png b/fa/.gitbook/assets/view-traces-in-langfuse.png new file mode 100644 index 000000000..530c1e3ed Binary files /dev/null and b/fa/.gitbook/assets/view-traces-in-langfuse.png differ diff --git a/fa/.gitbook/assets/viewing-app-data-in-langsmith.png b/fa/.gitbook/assets/viewing-app-data-in-langsmith.png new file mode 100644 index 000000000..95f6ca83f Binary files /dev/null and b/fa/.gitbook/assets/viewing-app-data-in-langsmith.png differ diff --git a/fa/.gitbook/assets/viewing-serial-structure-app-logs.png b/fa/.gitbook/assets/viewing-serial-structure-app-logs.png new file mode 100644 index 000000000..d2f4e2720 Binary files /dev/null and b/fa/.gitbook/assets/viewing-serial-structure-app-logs.png differ diff --git a/fa/.gitbook/assets/viewing-uploaded-document-segments.png b/fa/.gitbook/assets/viewing-uploaded-document-segments.png new file mode 100644 index 000000000..5227324f1 Binary files /dev/null and b/fa/.gitbook/assets/viewing-uploaded-document-segments.png differ diff --git a/fa/.gitbook/assets/viewing-uploaded-document.png b/fa/.gitbook/assets/viewing-uploaded-document.png new file mode 100644 index 000000000..fd470a305 Binary files /dev/null and b/fa/.gitbook/assets/viewing-uploaded-document.png differ diff --git a/fa/.gitbook/assets/weather inquiry (1).png b/fa/.gitbook/assets/weather inquiry (1).png new file mode 100644 index 000000000..6852b6b2d Binary files /dev/null and b/fa/.gitbook/assets/weather inquiry (1).png differ diff --git a/fa/.gitbook/assets/weather inquiry.png b/fa/.gitbook/assets/weather inquiry.png new file mode 100644 index 000000000..6852b6b2d Binary files /dev/null and b/fa/.gitbook/assets/weather inquiry.png differ diff --git a/fa/.gitbook/assets/workflow-configure-anwer-node.png b/fa/.gitbook/assets/workflow-configure-anwer-node.png new file mode 100644 index 000000000..b38114ca0 Binary files /dev/null and b/fa/.gitbook/assets/workflow-configure-anwer-node.png differ diff --git a/fa/.gitbook/assets/workflow-extract-subtitles-and-outlines.png b/fa/.gitbook/assets/workflow-extract-subtitles-and-outlines.png new file mode 100644 index 000000000..930166a9b Binary files /dev/null and b/fa/.gitbook/assets/workflow-extract-subtitles-and-outlines.png differ diff --git a/fa/.gitbook/assets/workflow-generate-subtitles-node.png b/fa/.gitbook/assets/workflow-generate-subtitles-node.png new file mode 100644 index 000000000..390e0f883 Binary files /dev/null and b/fa/.gitbook/assets/workflow-generate-subtitles-node.png differ diff --git a/fa/.gitbook/assets/workflow-google-search-tool.png b/fa/.gitbook/assets/workflow-google-search-tool.png new file mode 100644 index 000000000..724559831 Binary files /dev/null and b/fa/.gitbook/assets/workflow-google-search-tool.png differ diff --git a/fa/.gitbook/assets/workflow-http-request-node.png b/fa/.gitbook/assets/workflow-http-request-node.png new file mode 100644 index 000000000..54750fe69 Binary files /dev/null and b/fa/.gitbook/assets/workflow-http-request-node.png differ diff --git a/fa/.gitbook/assets/workflow-iteration-llm-node.png b/fa/.gitbook/assets/workflow-iteration-llm-node.png new file mode 100644 index 000000000..acc87730b Binary files /dev/null and b/fa/.gitbook/assets/workflow-iteration-llm-node.png differ diff --git a/fa/.gitbook/assets/workflow-iteration-node.png b/fa/.gitbook/assets/workflow-iteration-node.png new file mode 100644 index 000000000..54a0b37ac Binary files /dev/null and b/fa/.gitbook/assets/workflow-iteration-node.png differ diff --git a/fa/.gitbook/assets/workflow-parameter-extraction-node.png b/fa/.gitbook/assets/workflow-parameter-extraction-node.png new file mode 100644 index 000000000..aca2692b2 Binary files /dev/null and b/fa/.gitbook/assets/workflow-parameter-extraction-node.png differ diff --git a/fa/.gitbook/assets/workflow-start-node.png b/fa/.gitbook/assets/workflow-start-node.png new file mode 100644 index 000000000..f9819f11e Binary files /dev/null and b/fa/.gitbook/assets/workflow-start-node.png differ diff --git a/fa/.gitbook/assets/workflow-template-node.png b/fa/.gitbook/assets/workflow-template-node.png new file mode 100644 index 000000000..2eac11bc0 Binary files /dev/null and b/fa/.gitbook/assets/workflow-template-node.png differ diff --git a/fa/.gitbook/assets/workflow-tool.png b/fa/.gitbook/assets/workflow-tool.png new file mode 100644 index 000000000..4b527c306 Binary files /dev/null and b/fa/.gitbook/assets/workflow-tool.png differ diff --git a/fa/.gitbook/assets/xinference-webpage.png b/fa/.gitbook/assets/xinference-webpage.png new file mode 100644 index 000000000..f45e6e7d4 Binary files /dev/null and b/fa/.gitbook/assets/xinference-webpage.png differ diff --git "a/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.04.16.png" "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.04.16.png" new file mode 100644 index 000000000..e1be593b6 Binary files /dev/null and "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.04.16.png" differ diff --git "a/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.11.52.png" "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.11.52.png" new file mode 100644 index 000000000..f4432b872 Binary files /dev/null and "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.11.52.png" differ diff --git "a/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.13.06.png" "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.13.06.png" new file mode 100644 index 000000000..23ab31104 Binary files /dev/null and "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.13.06.png" differ diff --git "a/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.14.16.png" "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.14.16.png" new file mode 100644 index 000000000..d61cbd742 Binary files /dev/null and "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.14.16.png" differ diff --git "a/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.17.40.png" "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.17.40.png" new file mode 100644 index 000000000..6ddd8f579 Binary files /dev/null and "b/fa/.gitbook/assets/\346\210\252\345\261\2172024-09-27 13.17.40.png" differ diff --git a/fa/README.md b/fa/README.md new file mode 100644 index 000000000..f1cdf36c1 --- /dev/null +++ b/fa/README.md @@ -0,0 +1,46 @@ +# خوش آمدید به Dify + +Dify یک پلتفرم متن‌باز برای ساخت برنامه‌های هوش مصنوعی است. ما Backend-as-a-Service و LLMOps را با هم ترکیب کرده‌ایم تا توسعه راه‌حل‌های هوش مصنوعی مولد را ساده کنیم و آن را برای توسعه‌دهندگان و نوآوران غیر فنی قابل دسترسی کنیم. + +پلتفرم ما ادغام شده از: + +- پشتیبانی از LLM های اصلی +- رابط کاربری بصری برای سازماندهی Prompt ها +- موتورهای RAG با کیفیت بالا +- چارچوب انعطاف‌پذیر AI Agent +- یک گردش کار Low-code بصری +- رابط‌های کاربری و API های آسان برای استفاده + +با Dify، می‌توانید از پیچیدگی‌ها صرف نظر کنید و روی آنچه که اهمیت بیشتری دارد، تمرکز کنید - ایجاد برنامه‌های نوآورانه هوش مصنوعی که مشکلات دنیای واقعی را حل می‌کنند. + +### مزیت Dify + +در حالی که بسیاری از ابزارهای توسعه هوش مصنوعی اجزای جداگانه‌ای را ارائه می‌دهند، Dify یک راه حل جامع و آماده تولید را ارائه می‌دهد. Dify را به عنوان یک سیستم داربست طراحی شده به خوبی در نظر بگیرید، نه فقط یک جعبه ابزار. + +به عنوان یک پلتفرم متن‌باز، Dify توسط یک تیم حرفه‌ای اختصاصی و یک جامعه پررونق به طور مشترک ایجاد شده است. این همکاری تضمین می‌کند که تکرار سریع، ویژگی‌های قوی و رابط کاربری دوستانه ارائه شود. + +با Dify می‌توانید: + +- با استفاده از هر مدلی، قابلیت‌هایی مشابه API Assistants و GPT ها را مستقر کنید. +- با گزینه‌های امنیتی انعطاف‌پذیر، کنترل کامل روی داده‌های خود را حفظ کنید. +- از رابط کاربری بصری برای مدیریت و استقرار آسان استفاده کنید. + +### Dify + +{% hint style="info" %} نام Dify از "Define + Modify" گرفته شده است، که به تعریف و بهبود مداوم برنامه‌های هوش مصنوعی شما اشاره دارد. این برای شما ساخته شده است. {% endhint %} + +در اینجا نحوه استفاده از Dify توسط گروه‌های مختلف آمده است: + +1. **استارت‌آپ‌ها**: به سرعت نمونه اولیه‌ای از ایده‌های هوش مصنوعی خود را بسازید و آن را تکرار کنید و هم موفقیت‌ها و هم شکست‌ها را تسریع کنید. تیم‌های متعددی از Dify برای ساخت MVP ها، تامین مالی و کسب قراردادهای مشتری استفاده کرده‌اند. +2. **مشاغل تثبیت شده**: برنامه‌های موجود را با قابلیت‌های LLM ارتقا دهید. از API های RESTful Dify برای جدا کردن Prompts از منطق تجاری استفاده کنید، در حالی که از رابط مدیریت ما برای ردیابی داده‌ها، هزینه‌ها و استفاده استفاده می‌کنید. +3. **زیرساخت هوش مصنوعی سازمانی**: بانک‌ها و شرکت‌های فناوری Dify را به عنوان یک دروازه داخلی LLM مستقر می‌کنند که با حاکمیت متمرکز، تصویب GenAI را تسهیل می‌کند. +4. **علاقه‌مندان و یادگیرندگان هوش مصنوعی**: با سهولت، مهندسی Prompt را تمرین کنید و فناوری‌های عامل را کاوش کنید. بیش از 60000 توسعه‌دهنده اولین برنامه هوش مصنوعی خود را روی Dify حتی قبل از معرفی GPT ها ساختند. از آن زمان، جامعه ما به طور قابل توجهی رشد کرده است و در حال حاضر بیش از 180000 توسعه‌دهنده را در خود جای داده و از 59000+ کاربر نهایی پشتیبانی می‌کند. + +چه یک بنیانگذار استارت‌آپ، یک توسعه‌دهنده سازمانی یا یک علاقه‌مند به هوش مصنوعی باشید، Dify برای برآوردن نیازهای شما و تسریع در سفر هوش مصنوعی شما طراحی شده است! + +### مراحل بعدی + +- برای بررسی کلی گردش کار ساخت برنامه Dify، [**راهنمای سریع شروع**](https://docs.dify.ai/application/creating-an-application) را بخوانید. +- یاد بگیرید که چگونه [**Dify را خودتان مستقر کنید**](https://docs.dify.ai/getting-started/install-self-hosted) به سرورهای خود و [**مدل‌های متن‌باز را ادغام کنید**](https://docs.dify.ai/advanced/model-configuration)**.** +- [**مشخصات و نقشه راه Dify**](https://docs.dify.ai/getting-started/readme/features-and-specifications)**.** را درک کنید. +- [**ما را در GitHub دنبال کنید**](https://github.com/langgenius/dify) و **راهنمای مشارکت** ما را بخوانید. diff --git a/fa/SUMMARY.md b/fa/SUMMARY.md new file mode 100644 index 000000000..701abf462 --- /dev/null +++ b/fa/SUMMARY.md @@ -0,0 +1,170 @@ +# فهرست محتوا + +## شروع کار + +* [به Dify خوش آمدید](README.md) + * [ویژگی ها و مشخصات](getting-started/readme/features-and-specifications.md) + * [فهرست ارائه دهندگان مدل](getting-started/readme/model-providers.md) +* [جامعه Dify](getting-started/install-self-hosted/README.md) + * [راه‌اندازی توسط Docker Compose](getting-started/install-self-hosted/docker-compose.md) + * [شروع با Local Source Code](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) + * [سوالات متداول](getting-started/install-self-hosted/faqs.md) +* [Dify Cloud](getting-started/cloud.md) +* [Dify Premium on AWS](getting-started/dify-premium-on-aws.md) + +## راهنماها + +* [مدل](guides/model-configuration/README.md) + * [اضافه کردن ارائه دهنده جدید](guides/model-configuration/new-provider.md) + * [یکپارچه سازی مدل از پیش تعریف شده](guides/model-configuration/predefined-model.md) + * [یکپارچه سازی مدل سفارشی](guides/model-configuration/customizable-model.md) + * [رابط ها](guides/model-configuration/interfaces.md) + * [ساختار](guides/model-configuration/schema.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-concepts.md) + * [متغیرها](guides/workflow/variables.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) + * [شاخه شرطی IF/ELSE](guides/workflow/node/ifelse.md) + * [اجرای کد](guides/workflow/node/code.md) + * [الگو](guides/workflow/node/template.md) + * [جمع کننده متغیر](guides/workflow/node/variable-assigner.md) + * [تخصیص متغیر](guides/workflow/node/variable-assignment.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/orchestrate-node.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/knowledge-base/connect-external-knowledge.md) + * [API دانش خارجی](guides/knowledge-base/external-knowledge-api-documentation.md) +* [ابزارها](guides/tools/README.md) + * [یکپارچه سازی سریع ابزار](guides/tools/quick-tool-integration.md) + * [یکپارچه سازی پیشرفته ابزار](guides/tools/advanced-tool-integration.md) + * [تنظیمات ابزار](guides/tools/tool-configuration/README.md) + * [گوگل](guides/tools/tool-configuration/google.md) + * [بینگ](guides/tools/tool-configuration/bing.md) + * [SearchApi](guides/tools/tool-configuration/searchapi.md) + * [StableDiffusion](guides/tools/tool-configuration/stable-diffusion.md) + * [Dall-e](guides/tools/tool-configuration/dall-e.md) + * [جستجوی Perplexity](guides/tools/tool-configuration/perplexity.md) + * [AlphaVantage](guides/tools/tool-configuration/alphavantage.md) + * [SearXNG](guides/tools/tool-configuration/searxng.md) + * [Serper](guides/tools/tool-configuration/serper.md) + * [SiliconFlow (با پشتیبانی Flux AI)](guides/tools/tool-configuration/siliconflow.md) +* [انتشار](guides/application-publishing/README.md) + * [انتشار به عنوان یک برنامه وب تک صفحه ای](guides/application-publishing/launch-your-webapp-quickly/README.md) + * [تنظیمات برنامه وب](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) + * [جاسازی در وبسایت ها](guides/application-publishing/embedding-in-websites.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) + * [یکپارچه سازی ابزارهای عملیات خارجی](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) + * [استقرار ابزار API با Cloudflare Workers](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.md) + * [دعوت و مدیریت اعضا](guides/workspace/invite-and-manage-members.md) +* [مدیریت](guides/management/README.md) + * [مدیریت برنامه](guides/management/app-management.md) + * [مدیریت اعضای تیم](guides/management/team-members-management.md) + * [مدیریت حساب شخصی](guides/management/personal-account-management.md) + * [مدیریت اشتراک](guides/management/subscription-management.md) + +## کارگاه + +* [مقدماتی](workshop/basic/README.md) + * [چگونه یک برنامه تولید تصویر هوش مصنوعی بسازیم](workshop/basic/build-ai-image-generation-app.md) +* [متوسط](workshop/intermediate/README.md) + * [تولید تحلیل حساب توییتر با استفاده از عامل Chatflow](workshop/intermediate/twitter-chatflow.md) + +## جامعه + +* [درخواست پشتیبانی](community/support.md) +* [یک همکار شوید](community/contribution.md) +* [مشارکت در مستندات Dify](community/docs-contribution.md) + +## توسعه + +* [پشت سر](development/backend/README.md) + * [DifySandbox](development/backend/sandbox/README.md) + * [راهنمای مشارکت](development/backend/sandbox/contribution.md) +* [یکپارچه سازی مدل ها](development/models-integration/README.md) + * [یکپارچه سازی مدل های منبع باز از Hugging Face](development/models-integration/hugging-face.md) + * [یکپارچه سازی مدل های منبع باز از Replicate](development/models-integration/replicate.md) + * [یکپارچه سازی مدل های محلی مستقر شده توسط Xinference](development/models-integration/xinference.md) + * [یکپارچه سازی مدل های محلی مستقر شده توسط OpenLLM](development/models-integration/openllm.md) + * [یکپارچه سازی مدل های محلی مستقر شده توسط LocalAI](development/models-integration/localai.md) + * [یکپارچه سازی مدل های محلی مستقر شده توسط Ollama](development/models-integration/ollama.md) + * [یکپارچه سازی مدل ها در پروکسی LiteLLM](development/models-integration/litellm.md) + +## بیشتر بدانید + +* [موارد استفاده](learn-more/use-cases/README.md) + * [ساخت یک دستیار هوش مصنوعی Notion](learn-more/use-cases/build-an-notion-ai-assistant.md) + * [ایجاد یک ربات Midjourney Prompt با Dify](learn-more/use-cases/create-a-midjourney-prompt-bot-with-dify.md) + * [ایجاد یک ربات چت هوش مصنوعی با داده های تجاری در عرض چند دقیقه](learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md) + * [یکپارچه سازی ربات چت Dify در وبسایت Wix شما](learn-more/use-cases/how-to-integrate-dify-chatbot-to-your-wix-website.md) + * [نحوه اتصال به پایگاه دانش AWS Bedrock؟](learn-more/use-cases/how-to-connect-aws-bedrock.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) + * [نحوه استفاده از خروجی JSON Schema در Dify؟](learn-more/extended-reading/how-to-use-json-schema-in-dify.md) +* [سوالات متداول](learn-more/faq/README.md) + * [مربوط به میزبانی خود](learn-more/faq/install-faq.md) + * [تنظیمات و استفاده از LLM](learn-more/faq/use-llms-faq.md) + +## سیاست ها + +* [مجوز منبع باز](policies/open-source.md) +* [قرارداد کاربری](policies/agreement/README.md) + * [شرایط استفاده](https://dify.ai/terms) + * [سیاست حفظ حریم خصوصی](https://dify.ai/privacy) + + diff --git a/fa/community/contribution.md b/fa/community/contribution.md new file mode 100644 index 000000000..121d3612d --- /dev/null +++ b/fa/community/contribution.md @@ -0,0 +1,160 @@ +# مشارکت + +پس شما به دنبال مشارکت در Dify هستید - عالی است، ما مشتاقانه منتظر دیدن کارهای شما هستیم. به عنوان یک استارتاپ با تعداد کارکنان و بودجه محدود، ما آرزوی بزرگی داریم که intuitive ترین گردش کار را برای ساخت و مدیریت برنامه های LLM طراحی کنیم. هر کمکی از طرف جامعه، واقعا ارزشمند است. + +با توجه به موقعیت کنونی ما، باید چابک و سریع عمل کنیم، اما همچنین می خواهیم اطمینان حاصل کنیم که مشارکت کنندگانی مانند شما، به آسانی و بدون هیچ مشکلی در این فرآیند سهیم شوند. به همین منظور این راهنمای مشارکت را گردآوری کرده ایم، که هدف آن آشنایی شما با کد پایه و نحوه کار ما با مشارکت کنندگان است، تا بتوانید به سرعت به بخش سرگرم کننده آن بپرید. + +این راهنما، مانند Dify، به طور مداوم در حال پیشرفت است. اگر گاهی اوقات با پروژه واقعی همگام نباشد، قدردانی ما از درک شما را به همراه دارد، و هرگونه بازخوردی برای بهبود آن از شما استقبال می شود. + +در مورد مجوز، لطفاً چند لحظه وقت بگذارید و [مجوز و توافق نامه مشارکت](https://github.com/langgenius/dify/blob/main/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) موضوع جدید. ما موضوعات را به دو نوع دسته بندی می کنیم: + +#### درخواست ویژگی: + +* اگر یک درخواست ویژگی جدید را باز می کنید، می خواهیم توضیح دهید که ویژگی پیشنهادی چه چیزی را انجام می دهد و تا حد امکان اطلاعات زمینه را درج کنید. [@perzeusss](https://github.com/perzeuss) یک [Copilot درخواست ویژگی](https://udify.app/chat/MK2kVSnw1gakVwMX) مطمئن را ساخته است که به شما در draft کردن نیازهایتان کمک می کند. مایلید امتحان کنید. +* اگر می خواهید یکی از موضوعات موجود را انتخاب کنید، simply یک نظر در زیر آن بگذارید و این را بگویید. + + یک عضو تیم که در جهت مرتبط کار می کند، informed خواهد شد. اگر همه چیز خوب به نظر می رسد، آنها به شما اجازه شروع coding را خواهند داد. از شما می خواهیم که تا آن زمان از کار روی feature خودداری کنید، تا هیچ کاری شما هدر نرود اگر تغییراتی را پیشنهاد دهیم. + + بسته به اینکه feature پیشنهادی در کدام area قرار دارد، ممکن است با اعضای مختلف تیم صحبت کنید. در اینجا خلاصه area های که هر عضو تیم در حال حاضر روی آن کار می کند آورده شده است: + + | عضو | scope | + | --------------------------------------------------------------------------------------- | ---------------------------------------------------- | + | [@yeuoly](https://github.com/Yeuoly) | طراحی Agents | + | [@jyong](https://github.com/JohnJyong) | طراحی خط لوله RAG | + | [@GarfieldDai](https://github.com/GarfieldDai) | ساخت گردش کار orchestration ها | + | [@iamjoel](https://github.com/iamjoel) & [@zxhlyh](https://github.com/zxhlyh) | آسان کردن استفاده از Frontend | + | [@guchenhe](https://github.com/guchenhe) & [@crazywoola](https://github.com/crazywoola) | تجربه developer و نقاط تماس برای هر چیزی | + | [@takatost](https://github.com/takatost) | جهت کلی product و architecture | + + نحوه اولویت بندی ما: + + | نوع ویژگی | priority | + | ------------------------------------------------------------ | --------------- | + | ویژگی های priority بالا که توسط یک عضو تیم برچسب گذاری شده اند | priority بالا | + | درخواست های ویژگی محبوب از [تخته feedback جامعه](https://github.com/langgenius/dify/discussions/categories/ideas) | priority متوسط | + | ویژگی های non-core و enhancement های جزئی | priority پایین | + | ارزشمند اما immediate نیست | Feature آینده ای | + +#### هر چیز دیگری (به عنوان مثال گزارش باگ، بهینه سازی عملکرد، تصحیح typo ): + +* مستقیماً coding را شروع کنید. + + نحوه اولویت بندی ما: + + | نوع Issue | priority | + | ----------------------------------------------------------------------------------- | --------------- | + | باگ ها در function های core (عدم امکان ورود، عدم function کردن برنامه ها، loopholes امنیتی) | Critical | + | باگ های non-critical ، boost های performance | priority متوسط | + | رفع minor ( typos ، UI confusing اما working ) | priority پایین | + +### نصب + +در اینجا steps برای setup کردن Dify برای development آورده شده است: + +#### 1. fork این repository + +#### 2. clone repo + +repo fork شده را از terminal خود clone کنید: + +``` +git clone git@github.com:/dify.git +``` + +#### 3. verify dependencies + +Dify به dependencies زیر برای build نیاز دارد، مطمئن شوید که آن ها بر روی سیستم شما نصب شده اند: + +* [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. installations + +Dify از backend و frontend تشکیل شده است. با `cd api/` به directory backend رفته، سپس [README backend](https://github.com/langgenius/dify/blob/main/api/README.md) را دنبال کنید تا آن را نصب کنید. در یک terminal مجزا، با `cd web/` به directory frontend رفته، سپس [README frontend](https://github.com/langgenius/dify/blob/main/web/README.md) را دنبال کنید تا نصب شود. + +[FAQ نصب](https://docs.dify.ai/learn-more/faq/install-faq) را check کنید تا لیستی از issues رایج و steps برای troubleshoot آن ها را مشاهده کنید. + +#### 5. visit dify در browser خود + +برای validate کردن setup خود، به [http://localhost:3000](http://localhost:3000) ( default ، یا URL و port خودتان) در browser خود سر بزنید. اکنون باید Dify را up and running ببینید. + +### Developing + +اگر provider مدل اضافه می کنید، [این guide](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/README.md) برای شما است. + +اگر tools استفاده شده در Agent Assistants و Workflows را اضافه می کنید، [این guide](https://github.com/langgenius/dify/blob/main/api/core/tools/README.md) برای شما است. + +> **Note** : اگر می خواهید به tool جدیدی مشارکت کنید، مطمئن شوید که اطلاعات تماس خود را در فایل 'YAML' tool درج کرده اید و PR docs مربوطه را در repository [Dify-docs](https://github.com/langgenius/dify-docs/tree/main/en/guides/tools/tool-configuration) submit کرده اید. + +برای کمک به شما در navigate سریع به جایی که مشارکت شما fit می شود، یک outline مختصر و annotated از backend و frontend Dify به شرح زیر است: + +#### Backend + +backend Dify با [Flask](https://flask.palletsprojects.com/en/3.0.x/) نوشته شده و از Python استفاده می کند. از [SQLAlchemy](https://www.sqlalchemy.org/) برای ORM و [Celery](https://docs.celeryq.dev/en/stable/getting-started/introduction.html) برای task queueing استفاده می کند. logic Authorization از Flask-login می گذرد. + +``` +[api/] +├── constants // تنظیمات ثابت که در کل کد استفاده می شود. +├── controllers // تعریف مسیر API و logic request handling. +├── core // orchestration core application ، integraسیون model و tools. +├── docker // تنظیمات مربوط به Docker و containerization. +├── events // event handling و processing +├── extensions // extensions با framework/platform های third-party. +├── fields // تعریف field برای serialization/marshalling. +├── libs // library های قابل استفاده مجدد و helpers. +├── migrations // script های مهاجرت database. +├── models // مدل های database و تعریف schema. +├── services // specify logic business. +├── storage // storage کلید خصوصی. +├── tasks // handling وظایف async و background jobs. +└── tests +``` + +#### Frontend + +وب سایت بر روی [Next.js](https://nextjs.org/) boilerplate در Typescript bootstrapped شده است و از [Tailwind CSS](https://tailwindcss.com/) برای styling استفاده می کند. [React-i18next](https://react.i18next.com/) برای internationalization استفاده می شود. + +``` +[web/] +├── app // layouts ، pages و components +│ ├── (commonLayout) // layout مشترک که در کل app استفاده می شود +│ ├── (shareLayout) // layouts که به طور خاص در جلسات token-specific مشترک هستند +│ ├── activate // صفحه activate +│ ├── components // shared by pages و layouts +│ ├── install // صفحه install +│ ├── signin // صفحه signin +│ └── styles // style های shared global +├── assets // assets استاتیک +├── bin // script هایی که در مرحله build اجرا می شوند +├── config // تنظیمات و option های قابل تنظیم +├── context // context های مشترک که توسط بخش های مختلف app استفاده می شوند +├── dictionaries // فایل های translate ویژه زبان +├── docker // تنظیمات container +├── hooks // hooks قابل استفاده مجدد +├── i18n // تنظیمات internationalization +├── models // شکل data models و شکل API responses را توصیف می کند +├── public // meta assets مانند favicon +├── service // شکل action های API را specify می کند +├── test +├── types // شرح پارامتر های function و ارزش های return +└── utils // function های utility مشترک +``` + +### submit کردن PR خود + +در نهایت، زمان open کردن یک pull request (PR) به repo ما است. برای ویژگی های major ، اول آن ها را به branch `deploy/dev` برای test merge می کنیم، قبل از اینکه به branch `main` بروند. اگر با issues مانند merge conflicts مواجه شدید یا نمی دانید چگونه یک pull request باز کنید، [آموزش pull request GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests) را check کنید. + +و تمام! پس از merge شدن PR شما، شما به عنوان مشارکت کننده در [README](https://github.com/langgenius/dify/blob/main/README.md) ما featured خواهید شد. + +### getting help + +اگر در حین مشارکت stuck شوید یا question burning داشته باشید، simply queries خود را از طریق issue مربوط GitHub به ما بفرستید، یا برای chat سریع به [Discord](https://discord.gg/AhzKf7dNgk) بپرید. + + diff --git a/fa/community/docs-contribution.md b/fa/community/docs-contribution.md new file mode 100644 index 000000000..39b50ad01 --- /dev/null +++ b/fa/community/docs-contribution.md @@ -0,0 +1,46 @@ +# مشارکت در مستندات Dify + +مستندات Dify یک [پروژه متن باز](https://github.com/langgenius/dify-docs) است و ما از مشارکت شما استقبال می‌کنیم. چه خطایی در حین خواندن اسناد پیدا کرده باشید یا مشتاق باشید محتوای خود را ارائه دهید، ما شما را تشویق می‌کنیم که یک مشکل را ثبت کنید یا یک pull request در GitHub ایجاد کنید. ما به سرعت به PR شما رسیدگی می‌کنیم. + +## نحوه مشارکت + +ما مسائل مربوط به مستندات را به دو نوع اصلی تقسیم می‌کنیم: + +* تصحیح محتوا (خطاهای تایپی / عدم دقت) +* اضافه کردن محتوا (مستندات جدید) + +### خطاهای محتوا + +اگر هنگام خواندن یک سند به خطایی برخوردید یا می‌خواهید تغییری را پیشنهاد دهید، لطفاً از دکمه "Edit on GitHub" که در جدول محتوا در سمت راست صفحه سند قرار دارد، استفاده کنید. از ویرایشگر آنلاین GitHub که در این سامانه تعبیه شده است، برای اعمال تغییرات خود استفاده کنید و سپس یک pull request با توضیح مختصر از ویرایش‌های خود ارسال کنید. لطفاً عنوان pull request خود را به صورت `Fix: Update xxx` قالب‌بندی کنید. ما بررسی خواهیم کرد و اگر همه چیز خوب به نظر برسد، تغییرات را ادغام خواهیم کرد. + +![](../.gitbook/assets/docs-contribution.png) + +همچنین می‌توانید لینک سند را در [صفحه Issues](https://github.com/langgenius/dify-docs/issues) با شرح کوتاهی از اصلاحات مورد نیاز ارسال کنید. ما به محض دریافت این موارد به آن‌ها رسیدگی خواهیم کرد. + +### اضافه کردن محتوا + +برای مشارکت در مستندات جدید در مخزن ما، لطفاً این مراحل را دنبال کنید: + +1. مخزن را Fork کنید + +مخزن را به حساب GitHub خود Fork کنید، سپس مخزن را به دستگاه محلی خود clone کنید: + +```bash +git clone https://github.com//dify-docs.git +``` + +> نکته: شما همچنین می‌توانید از ویرایشگر کد آنلاین GitHub برای ارسال مستقیم فایل‌های جدید Markdown در دایرکتوری مناسب استفاده کنید. + +1. دایرکتوری سند مربوطه را پیدا کنید و فایل خود را اضافه کنید + +به عنوان مثال، اگر در حال مشارکت در مستندات برای ابزارهای شخص ثالث هستید، لطفاً فایل‌های `.md` جدید را به دایرکتوری `/guides/tools/tool-configuration/` اضافه کنید. + +3. یک pull request ارسال کنید + +هنگام ارسال یک pull request، لطفاً از قالب `Docs: Add xxx` برای عنوان استفاده کنید و توضیح مختصری را در قسمت نظر ارائه دهید. ما بررسی خواهیم کرد و اگر همه چیز مرتب باشد، تغییرات را ادغام خواهیم کرد. + +## گرفتن کمک + +اگر هنگام مشارکت در هر مرحله‌ای گیر کردید یا سوالی برایتان پیش آمد، می‌توانید سؤال خود را از طریق issue مربوط به GitHub بپرسید، یا به [Discord](https://discord.gg/AhzKf7dNgk) ما بروید تا به سرعت با ما گفتگو کنید. + +از تلاش شما در بهبود مستندات Dify قدردانی می‌کنیم! diff --git a/fa/community/support.md b/fa/community/support.md new file mode 100644 index 000000000..84a159c5e --- /dev/null +++ b/fa/community/support.md @@ -0,0 +1,20 @@ +# پشتیبانی + +اگر در حین خواندن این مستندات هنوز هم سوال یا پیشنهادی در مورد استفاده از محصول دارید، لطفا راه‌های زیر را برای دریافت پشتیبانی امتحان کنید. تیم و جامعه ما تمام تلاش خود را برای کمک به شما انجام خواهند داد. + +### پشتیبانی جامعه + +{% hint style="info" %} +لطفاً اطلاعات حساب Dify یا سایر اطلاعات حساس خود را با جامعه به اشتراک نگذارید. کارکنان پشتیبانی ما از شما اطلاعات حساب نمیخواهند. +{% endhint %} + +* ایجاد یک Issue در [GitHub](https://github.com/langgenius/dify) +* پیوستن به [جامعه Discord](https://discord.gg/8Tpq4AcN9c) + +### تماس با ما + +برای مواردی غیر از پشتیبانی محصول. + +* ارسال ایمیل به [hello@dify.ai](mailto:hello@dify.ai) + + diff --git a/fa/development/backend/README.md b/fa/development/backend/README.md new file mode 100644 index 000000000..2ae28675d --- /dev/null +++ b/fa/development/backend/README.md @@ -0,0 +1 @@ +# توسعه بک‌اند diff --git a/fa/development/backend/sandbox/README.md b/fa/development/backend/sandbox/README.md new file mode 100644 index 000000000..b7d376ec0 --- /dev/null +++ b/fa/development/backend/sandbox/README.md @@ -0,0 +1,18 @@ +# DifySandbox + +### مقدمه +`DifySandbox` یک محیط اجرای کد سبک، سریع و امن است که از زبان‌های برنامه‌نویسی مختلفی مانند پایتون و Node.js پشتیبانی می‌کند. این محیط به عنوان بستر اجرایی زیربنایی برای اجزای مختلف در Dify Workflow مانند گره کد، گره تبدیل قالب، گره LLM و مترجم کد در گره ابزار عمل می‌کند. DifySandbox امنیت سیستم را تضمین می‌کند و در عین حال به Dify اجازه می‌دهد کدهای ارائه‌شده توسط کاربر را اجرا کند. + +### ویژگی‌ها +- **پشتیبانی چند زبانه**: DifySandbox بر اساس Seccomp، یک مکانیسم امنیتی سطح پایین ساخته شده است که امکان پشتیبانی از چندین زبان برنامه‌نویسی را فراهم می‌کند. در حال حاضر از پایتون و Node.js پشتیبانی می‌کند. +- **امنیت سیستم**: از یک سیاست لیست سفید استفاده می‌کند که فقط به تماس‌های سیستم خاص اجازه می‌دهد تا از نقض امنیتی غیرمنتظره جلوگیری کند. +- **جداسازی فایل سیستم**: کد کاربر در یک محیط جداگانه فایل سیستم اجرا می‌شود. +- **جداسازی شبکه**: + - **DockerCompose**: از یک شبکه Sandbox جداگانه و کانتینرهای پروکسی برای دسترسی به شبکه استفاده می‌کند و امنیت سیستم درون شبکه را حفظ می‌کند و در عین حال گزینه‌های پیکربندی پروکسی انعطاف‌پذیری را ارائه می‌دهد. + - **K8s**: استراتژی‌های جداسازی شبکه را می‌توان به طور مستقیم با استفاده از سیاست‌های خروجی پیکربندی کرد. + +### مخزن پروژه +می‌توانید با دسترسی به [DifySandbox](https://github.com/langgenius/dify-sandbox) ، کد منبع پروژه را دریافت کرده و برای دستورالعمل‌های استقرار و استفاده، مستندات پروژه را دنبال کنید. + +### مشارکت +لطفاً به [راهنمای مشارکت](contribution.md) مراجعه کنید تا نحوه مشارکت در توسعه DifySandbox را یاد بگیرید. diff --git a/fa/development/backend/sandbox/contribution.md b/fa/development/backend/sandbox/contribution.md new file mode 100644 index 000000000..1fd6c0cc9 --- /dev/null +++ b/fa/development/backend/sandbox/contribution.md @@ -0,0 +1,50 @@ +# مشارکت + +### ساختار کد +ساختار فایل کد زیر نشان‌دهنده سازماندهی پروژه است: +``` +[cmd/] +├── server // نقطه شروع راه‌اندازی سرور +├── lib // نقطه شروع کتابخانه مشترک +└── test // اسکریپت‌های تست مشترک +[build/] // اسکریپت‌های ساخت برای معماری‌ها و پلتفرم‌های مختلف +[internal/] // بسته‌های داخلی +├── controller // هندلرهای درخواست HTTP +├── middleware // میان‌افزار پردازش درخواست +├── server // تنظیمات و پیکربندی سرور +├── service // سرویس‌های کنترلر +├── static // فایل‌های پیکربندی +│ ├── nodejs_syscall // لیست سفید تماس‌های سیستمی Node.js +│ └── python_syscall // لیست سفید تماس‌های سیستمی پایتون +├── types // تعاریف موجودیت +├── core // منطق اصلی جداسازی و اجرا +│ ├── lib // کتابخانه‌های مشترک +│ ├── runner // اجرای کد +│ │ ├── nodejs // مجری Node.js +| | └── python // مجری پایتون +└── tests // تست‌های CI/CD +``` + +### اصول +کارایی اصلی دو نقطه ورود دارد: ورودی سرویس `HTTP` برای `DifySandbox` و ورودی `کتابخانه لینک دینامیک`. زمانی که Sandbox کدی را اجرا می‌کند، ابتدا یک فایل کد موقت ایجاد می‌کند. این فایل با فراخوانی `کتابخانه لینک دینامیک` برای راه‌اندازی محیط زمان اجرا (Sandbox) شروع می‌شود. سپس کد کاربر در این فایل موقت اجرا می‌شود، و این اطمینان حاصل می‌شود که سیستم در برابر کدهای احتمالی مضر ارسالی از سوی کاربر محافظت می‌شود. + +کتابخانه لینک دینامیک از `Seccomp` برای محدود کردن تماس‌های سیستمی استفاده می‌کند. دایرکتوری `static` حاوی فایل‌های `nodejs_syscall` و `python_syscall` است که لیست‌های سفید تماس‌های سیستمی را برای هر دو معماری `ARM64` و `AMD64` ارائه می‌کنند. در مجموع چهار فایل وجود دارد. لطفا در صورت لزوم این فایل‌ها را اصلاح نکنید. + +### نحوه مشارکت +برای مشکلات جزئی مانند `تایپو` و `باگ`، می‌توانید یک `درخواست ادغام` ارسال کنید. برای تغییرات اساسی یا ارسال‌های سطح `ویژگی`، لطفا ابتدا یک `issue` باز کنید تا بحث تسهیل شود. + +#### لیست کارها +در اینجا چند موردی که در حال حاضر در نظر داریم آورده شده است. اگر علاقه‌مند هستید، می‌توانید یکی از آنها را برای مشارکت انتخاب کنید: +- [ ] پشتیبانی از زبان‌های برنامه‌نویسی اضافی: + - در حال حاضر از `پایتون` و `Node.js` پشتیبانی می‌کنیم. در نظر بگیرید که پشتیبانی از زبان‌های جدید را اضافه کنید. + - به یاد داشته باشید که هر دو معماری `ARM64` و `AMD64` را در نظر بگیرید، و آزمایش‌های `CI` را برای اطمینان از امنیت هر زبان جدید ارائه کنید. +- [ ] مدیریت وابستگی‌های Node.js: + - پشتیبانی از وابستگی‌های `پایتون` را پیاده‌سازی کرده‌ایم که می‌توانند به طور خودکار در حین راه‌اندازی Sandbox نصب شوند. با این حال، به دلیل پیچیدگی `node_modules`، هنوز راه حل مناسبی برای `Node.js` پیدا نکرده‌ایم. این حوزه برای بهبود باز است. +- [ ] قابلیت‌های پردازش تصویر: + - با توجه به اهمیت روزافزون چندوجهی، پشتیبانی از پردازش تصویر در Sandbox ارزشمند خواهد بود. + - در نظر بگیرید که پشتیبانی از کتابخانه‌های پردازش تصویر مانند `Pillow` را اضافه کنید، و امکان ارسال تصاویر به Sandbox برای پردازش در Dify را فراهم کنید. +- [ ] تست‌های CI پیشرفته: + - تست‌های CI فعلی ما محدود هستند و فقط شامل موارد تست اولیه هستند. تست‌های جامع‌تر مفید خواهد بود. +- [ ] تولید داده‌های چندوجهی: + - استفاده از Sandbox برای تولید داده‌های چندوجهی مانند ترکیب متن و تصاویر را بررسی کنید. + diff --git a/fa/development/models-integration/README.md b/fa/development/models-integration/README.md new file mode 100644 index 000000000..3c4830190 --- /dev/null +++ b/fa/development/models-integration/README.md @@ -0,0 +1 @@ +# ادغام مدل‌ها diff --git a/fa/development/models-integration/hugging-face.md b/fa/development/models-integration/hugging-face.md new file mode 100644 index 000000000..d3e5ee941 --- /dev/null +++ b/fa/development/models-integration/hugging-face.md @@ -0,0 +1,71 @@ +# ادغام مدل‌های متن‌باز از هاگینگ فیس + +دیفای از تولید متن و توگنیزه پشتیبانی می‌کند. در زیر انواع مدل‌های هاگینگ فیس مربوطه آورده شده است: + +* تولید متن: [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. شما به یک حساب هاگینگ فیس نیاز دارید ([آدرس ثبت نام](https://huggingface.co/join)). +2. کلید API هاگینگ فیس را تنظیم کنید ([آدرس دریافت](https://huggingface.co/settings/tokens)). +3. یک مدل را برای ورود به [صفحه لیست مدل‌های هاگینگ فیس](https://huggingface.co/models?pipeline_tag=text-generation&sort=trending) انتخاب کنید. + +
+ +دیفای از دو روش برای دسترسی به مدل‌ها در هاگینگ فیس پشتیبانی می‌کند: + +1. API استنتاج میزبانی شده. این روش از مدل مستقر شده به طور رسمی توسط هاگینگ فیس استفاده می‌کند. هیچ هزینه‌ای لازم نیست. اما نقطه ضعف این است که فقط تعداد کمی از مدل‌ها از این روش پشتیبانی می‌کنند. +2. نقطه پایانی استنتاج. این روش از منابعی مانند AWS که توسط هاگینگ فیس دسترسی دارند برای استقرار مدل استفاده می‌کند و نیاز به پرداخت هزینه دارد. + +### مدل‌هایی که به API استنتاج میزبانی شده دسترسی دارند + +#### 1 انتخاب یک مدل + +API استنتاج میزبانی شده فقط در صورتی پشتیبانی می‌شود که در سمت راست صفحه جزئیات مدل، ناحیه‌ای حاوی API استنتاج میزبانی شده وجود داشته باشد. همانطور که در شکل زیر نشان داده شده است: + +
+ +در صفحه جزئیات مدل، می‌توانید نام مدل را دریافت کنید. + +
+ +#### 2 استفاده از مدل‌های دسترسی در دیفای + +در `Settings > Model Provider > Hugging Face > Model Type`، برای Endpoint Type، Hosted Inference API را انتخاب کنید. همانطور که در زیر نشان داده شده است: + +
+ +API Token کلید API است که در ابتدای مقاله تنظیم شده است. نام مدل، نام مدل است که در مرحله قبل به دست آمده است. + +### روش 2: نقطه پایانی استنتاج + +#### 1 انتخاب مدل برای استقرار + +نقطه پایانی استنتاج فقط برای مدل‌هایی با گزینه Inference Endpoints در زیر دکمه Deploy در سمت راست صفحه جزئیات مدل پشتیبانی می‌شود. همانطور که در زیر نشان داده شده است: + +
+ +#### 2 استقرار مدل + +دکمه Deploy را برای مدل کلیک کنید و گزینه Inference Endpoint را انتخاب کنید. اگر قبلاً کارت بانکی را متصل نکرده‌اید، باید کارت را متصل کنید. فقط مراحل را دنبال کنید. پس از اتصال کارت، رابط زیر ظاهر می‌شود: تنظیمات را با توجه به نیازها تغییر دهید و برای ایجاد یک نقطه پایانی استنتاج، روی Create Endpoint در گوشه پایین سمت چپ کلیک کنید. + +
+ +پس از استقرار مدل، می‌توانید URL نقطه پایانی را مشاهده کنید. + +
+ +#### 3 استفاده از مدل‌های دسترسی در دیفای + +در `Settings > Model Provider > Hugging face > Model Type`، برای Endpoint Type، Inference Endpoints را انتخاب کنید. همانطور که در زیر نشان داده شده است: + +
+ +API Token کلید API است که در ابتدای مقاله تنظیم شده است. `نام مدل Text-Generation می‌تواند دلخواه باشد، اما نام مدل Embeddings باید با هاگینگ فیس مطابقت داشته باشد. ` URL نقطه پایانی، URL نقطه پایانی است که پس از استقرار موفقیت‌آمیز مدل در مرحله قبل به دست آمده است. + +
+ +> توجه: "نام کاربری / نام سازمان" برای Embeddings باید مطابق با روش استقرار شما در [Inference Endpoints](https://huggingface.co/docs/inference-endpoints/guides/access) هاگینگ فیس پر شود، با "نام کاربری"[https://huggingface.co/settings/account] یا "[نام سازمان](https://ui.endpoints.huggingface.co/)". + + diff --git a/fa/development/models-integration/litellm.md b/fa/development/models-integration/litellm.md new file mode 100644 index 000000000..87fed29e9 --- /dev/null +++ b/fa/development/models-integration/litellm.md @@ -0,0 +1,82 @@ +# ادغام مدل ها در پروکسی LiteLLM + +[پروکسی LiteLLM](https://github.com/BerriAI/litellm) یک سرور پروکسی است که به شما امکان می‌دهد: + +* تماس با بیش از 100 مدل زبان بزرگ (LLM) (OpenAI، Azure، Vertex، Bedrock) در قالب OpenAI +* استفاده از کلیدهای مجازی برای تنظیم بودجه، محدودیت نرخ و ردیابی استفاده + +Dify از ادغام مدل‌های LLM و Text Embedding موجود در پروکسی LiteLLM پشتیبانی می‌کند. + +## ادغام سریع + +### گام 1. راه اندازی سرور پروکسی LiteLLM + +LiteLLM برای پیکربندی به یک فایل پیکربندی با تمام مدل‌های شما نیاز دارد – ما این فایل را `litellm_config.yaml` می‌نامیم. + +[مستندات دقیق در مورد نحوه تنظیم پیکربندی litellm – در اینجا](https://docs.litellm.ai/docs/proxy/configs) + +```yaml +model_list: + - model_name: gpt-4 + litellm_params: + model: azure/chatgpt-v-2 + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + api_key: + - model_name: gpt-4 + litellm_params: + model: azure/gpt-4 + api_key: + api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ + - model_name: gpt-4 + litellm_params: + model: azure/gpt-4 + api_key: + api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ +``` + +### گام 2. راه اندازی پروکسی LiteLLM + +```shell +docker run \ + -v $(pwd)/litellm_config.yaml:/app/config.yaml \ + -p 4000:4000 \ + ghcr.io/berriai/litellm:main-latest \ + --config /app/config.yaml --detailed_debug +``` + +در صورت موفقیت، پروکسی در `http://localhost:4000` اجرا خواهد شد. + +### گام 3. ادغام پروکسی LiteLLM در Dify + +در `تنظیمات > ارائه دهندگان مدل > OpenAI-API-compatible`، موارد زیر را پر کنید: + +
+ +* نام مدل: `gpt-4` +* URL پایه: `http://localhost:4000` + + URL پایه را که سرویس LiteLLM در آن قابل دسترسی است، وارد کنید. +* نوع مدل: `چت` +* طول متن مدل: `4096` + + حداکثر طول متن مدل. در صورت عدم اطمینان، از مقدار پیش فرض 4096 استفاده کنید. +* حداکثر تعداد توکن: `4096` + + حداکثر تعداد توکن‌های بازگردانده شده توسط مدل. در صورت عدم وجود نیازهای خاص برای مدل، این می‌تواند با طول متن مدل مطابقت داشته باشد. +* پشتیبانی از دیداری: `بله` + + این گزینه را بررسی کنید اگر مدل از درک تصویر (چند حالته) پشتیبانی می‌کند، مانند `gpt4-o`. + +برای استفاده از مدل در برنامه بعد از اطمینان از عدم وجود خطا، روی "ذخیره" کلیک کنید. + +روش ادغام برای مدل‌های Embedding مشابه LLM است، فقط نوع مدل را به Text Embedding تغییر دهید. + +## اطلاعات بیشتر + +برای اطلاعات بیشتر در مورد LiteLLM، به موارد زیر مراجعه کنید: + +* [LiteLLM](https://github.com/BerriAI/litellm) +* [سرور پروکسی LiteLLM](https://docs.litellm.ai/docs/simple\_proxy) + + diff --git a/fa/development/models-integration/localai.md b/fa/development/models-integration/localai.md new file mode 100644 index 000000000..38bd20c49 --- /dev/null +++ b/fa/development/models-integration/localai.md @@ -0,0 +1,92 @@ +# ادغام با LocalAI برای استقرار مدل‌های محلی + +[LocalAI](https://github.com/go-skynet/LocalAI) یک جایگزین API REST است که با مشخصات API OpenAI برای استنتاج محلی سازگار است. به شما اجازه می‌دهد تا LLMs (و نه فقط) را به صورت محلی یا در محل با سخت افزار درجه مصرف کننده اجرا کنید و از خانواده‌های مدل‌های مختلفی که با فرمت ggml سازگار هستند، پشتیبانی می‌کند. به GPU نیاز ندارد. + +Dify امکان ادغام با LocalAI را برای استقرار محلی قابلیت‌های استنتاج و جاسازی مدل‌های زبان بزرگ فراهم می‌کند. + +## استقرار LocalAI + +### راه اندازی LocalAI + +برای استقرار می‌توانید به راهنمای رسمی [شروع کار](https://localai.io/basics/getting_started/) مراجعه کنید، یا مراحل زیر را به سرعت انجام دهید: + +(این مراحل از [مثال پرس و جو داده LocalAI](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 + ``` + + در اینجا، ما دو مدل کوچکتر را انتخاب می‌کنیم که در همه پلتفرم‌ها سازگار هستند. `ggml-gpt4all-j` به عنوان مدل LLM پیش فرض و `all-MiniLM-L6-v2` به عنوان مدل جاسازی پیش فرض برای استقرار محلی سریع عمل می‌کنند. + +3. فایل .env را پیکربندی کنید. + + ```shell + $ mv .env.example .env + ``` + + نکته: اطمینان حاصل کنید که مقدار متغیر THREADS در `.env` از تعداد هسته‌های 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) + ``` + + نقطه پایانی API درخواست LocalAI در http://127.0.0.1:8080 در دسترس خواهد بود. + + و دو مدل را ارائه می‌دهد: + + - مدل 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 می‌تواند به نقطه پایانی LocalAI دسترسی پیدا کند. کانتینر Dify نمی‌تواند به localhost در داخل دسترسی پیدا کند و باید از آدرس IP میزبان استفاده کنید. + +5. مدل‌ها را در Dify ادغام کنید. + + به `Settings > Model Providers > 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 مراجعه کنید. diff --git a/fa/development/models-integration/ollama.md b/fa/development/models-integration/ollama.md new file mode 100644 index 000000000..b2e703fbf --- /dev/null +++ b/fa/development/models-integration/ollama.md @@ -0,0 +1,123 @@ +# ادغام مدل‌های محلی استقرار یافته توسط Ollama + +![ollama](<../../.gitbook/assets/ollama (1).png>) + +[Ollama](https://github.com/jmorganca/ollama) یک فریمورک استنباط محلی است که به کاربران امکان استقرار با یک کلیک مدل‌های زبانی بزرگ مانند Llama 2، Mistral، Llava و غیره را می‌دهد. Dify از قابلیت ادغام LLM و Text Embedding مدل‌های زبانی بزرگ مستقر شده با Ollama پشتیبانی می‌کند. + +## ادغام سریع + +### دانلود و راه‌اندازی Ollama + +1. دانلود Ollama + + برای دانلود Ollama، به [https://ollama.ai/download](https://ollama.ai/download) مراجعه کنید. +2. اجرای Ollama و چت با Llava + + ```bash + ollama run llava + ``` + + پس از راه‌اندازی موفقیت‌آمیز، Ollama یک سرویس API را روی پورت 11434 محلی شروع می‌کند که می‌توان از طریق `http://localhost:11434` به آن دسترسی داشت. + + برای مدل‌های دیگر، برای کسب اطلاعات بیشتر به [Ollama Models](https://ollama.ai/library) مراجعه کنید. +3. ادغام Ollama در Dify + + در `تنظیمات > ارائه دهنده‌های مدل > Ollama`، موارد زیر را پر کنید: + + ![](../../.gitbook/assets/ollama-config-en.png) + + * نام مدل: `llava` + * آدرس پایه: `http://:11434` + + آدرس پایه جایی که سرویس Ollama قابل دسترسی است را وارد کنید. + + اگر Dify با استفاده از داکر استقرار یافته است، استفاده از آدرس IP شبکه محلی، مانند `http://192.168.1.100:11434` یا آدرس IP ماشین میزبان داکر، مانند `http://172.17.0.1:11434` را در نظر بگیرید. + + برای استقرار کد منبع محلی، `http://localhost:11434` را استفاده کنید. + * نوع مدل: `Chat` + * طول متن مدل: `4096` + + حداکثر طول متن مدل. در صورت عدم اطمینان، از مقدار پیش‌فرض 4096 استفاده کنید. + * حداکثر محدودیت توکن: `4096` + + حداکثر تعداد توکن‌های بازگردانده شده توسط مدل. اگر الزامات خاصی برای مدل وجود ندارد، این مقدار می‌تواند با طول متن مدل مطابقت داشته باشد. + * پشتیبانی از بینایی: `بله` + + اگر مدل از درک تصویر (چند وجهی)، مانند `llava`، پشتیبانی می‌کند، این گزینه را علامت بزنید. + + پس از تأیید عدم وجود خطا، برای استفاده از مدل در برنامه، روی "ذخیره" کلیک کنید. + + روش ادغام برای مدل‌های Embedding مشابه LLM است، فقط نوع مدل را به Text Embedding تغییر دهید. +4. استفاده از مدل‌های Ollama + + ![](../../.gitbook/assets/ollama-use-model-en.png) + + وارد صفحه `Prompt Eng.` برنامه مورد نظر برای پیکربندی شوید، مدل `llava` را در زیر ارائه دهنده Ollama انتخاب کنید و پس از تنظیم پارامترهای مدل از آن استفاده کنید. + +## سؤالات متداول + +### ⚠️ اگر برای استقرار 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')) +``` + +این خطا زمانی رخ می‌دهد که سرویس Ollama از داخل کانتینر داکر قابل دسترسی نیست. `localhost` معمولاً به خود کانتینر اشاره می‌کند، نه به ماشین میزبان یا سایر کانتینرها. برای حل این مشکل، باید سرویس Ollama را در شبکه `http://localhost:11434` پخش کنید. + +### تنظیم متغیرهای محیطی در Mac + +اگر Ollama به عنوان یک برنامه macOS اجرا شود، باید متغیرهای محیطی را با استفاده از `launchctl` تنظیم کنید: + +1. برای هر متغیر محیطی، `launchctl setenv` را صدا کنید. + + ```bash + launchctl setenv OLLAMA_HOST "0.0.0.0" + ``` +2. برنامه Ollama را مجدداً راه‌اندازی کنید. +3. اگر مراحل فوق بی‌اثر بودند، می‌توانید از روش زیر استفاده کنید: + + مشکل در خود داکر نهفته است و برای دسترسی به میزبان داکر، `host.docker.internal` را به جای `localhost` در سرویس `http://host.docker.internal:11434` قرار دهید تا به درستی کار کند. + +### تنظیم متغیرهای محیطی در Linux + +اگر Ollama به عنوان یک سرویس `systemd` اجرا شود، باید متغیرهای محیطی را با استفاده از `systemctl` تنظیم کنید: + +1. با فراخوانی `systemctl edit ollama.service`، سرویس `systemd` را ویرایش کنید. این عمل ویرایشگر را باز می‌کند. +2. برای هر متغیر محیطی، یک خط `Environment` را در بخش `[Service]` اضافه کنید: + + ```ini + [Service] + Environment="OLLAMA_HOST=0.0.0.0" + ``` +3. ذخیره و خروج کنید. +4. `systemd` را مجدداً بارگیری کنید و Ollama را راه‌اندازی مجدد کنید: + + ```bash + systemctl daemon-reload + systemctl restart ollama + ``` + +### تنظیم متغیرهای محیطی در Windows + +در ویندوز، Ollama متغیرهای محیطی کاربر و سیستم شما را به ارث می‌برد. + +1. ابتدا با کلیک روی آن در نوار وظیفه، Ollama را ببندید. +2. از طریق کنترل پنل، متغیرهای محیطی سیستم را ویرایش کنید. +3. متغیر(های) جدید را برای حساب کاربری خود برای `OLLAMA_HOST`، `OLLAMA_MODELS` و غیره ویرایش یا ایجاد کنید. +4. برای ذخیره تغییرات، روی OK/Apply کلیک کنید. +5. `ollama` را از یک پنجره ترمینال جدید اجرا کنید. + +## چگونه می‌توان Ollama را در شبکه خود منتشر کرد؟ + +Ollama به طور پیش‌فرض `127.0.0.1` پورت `11434` را می‌بندد. با استفاده از متغیر محیطی `OLLAMA_HOST`، آدرس پیوند را تغییر دهید. + +## اطلاعات بیشتر + +برای کسب اطلاعات بیشتر درباره Ollama، به موارد زیر مراجعه کنید: + +* [Ollama](https://github.com/jmorganca/ollama) +* [Ollama FAQ](https://github.com/ollama/ollama/blob/main/docs/faq.md) + + diff --git a/fa/development/models-integration/openllm.md b/fa/development/models-integration/openllm.md new file mode 100644 index 000000000..9405b0190 --- /dev/null +++ b/fa/development/models-integration/openllm.md @@ -0,0 +1,26 @@ +# اتصال به مدل‌های OpenLLM مستقر محلی + +با [OpenLLM](https://github.com/bentoml/OpenLLM) می‌توانید استنتاج را با هر مدل زبان بزرگ منبع باز انجام دهید، آن را در ابر یا به صورت محلی مستقر کنید و برنامه‌های AI قدرتمندی بسازید. +و Dify از اتصال به قابلیت‌های استنتاج مدل زبان بزرگ OpenLLM که به صورت محلی مستقر شده‌اند، پشتیبانی می‌کند. + +## استقرار مدل OpenLLM +### راه‌اندازی 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 استفاده کنید. + + زیر `Settings > Model Providers > OpenLLM` را پر کنید: + + - نام مدل: `facebook/opt-1.3b` + - آدرس URL سرور: `http://:3333` با آدرس IP ماشین خود جایگزین کنید + + روی "Save" کلیک کنید و مدل را می توان در برنامه استفاده کرد. + +این راهنما فقط برای اتصال سریع به عنوان مثال است. برای ویژگی‌ها و اطلاعات بیشتر در مورد استفاده از OpenLLM، لطفا به: [OpenLLM](https://github.com/bentoml/OpenLLM) مراجعه کنید. diff --git a/fa/development/models-integration/replicate.md b/fa/development/models-integration/replicate.md new file mode 100644 index 000000000..c19592946 --- /dev/null +++ b/fa/development/models-integration/replicate.md @@ -0,0 +1,18 @@ +# ادغام مدل‌های منبع باز از Replicate + +Dify از دسترسی به [مدل‌های زبان](https://replicate.com/collections/language-models) و [مدل‌های تعبیه](https://replicate.com/collections/embedding-models) در Replicate پشتیبانی می‌کند. مدل‌های زبان با مدل استدلال Dify و مدل‌های تعبیه با مدل تعبیه Dify مطابقت دارند. + +مراحل خاص به شرح زیر است: + +1. شما باید یک حساب Replicate داشته باشید ([آدرس ثبت نام](https://replicate.com/signin?next=/docs)). +2. کلید API را دریافت کنید ([آدرس دریافت](https://replicate.com/signin?next=/docs)). +3. یک مدل را انتخاب کنید. مدل را در [مدل‌های زبان](https://replicate.com/collections/language-models) و [مدل‌های تعبیه](https://replicate.com/collections/embedding-models) انتخاب کنید. +4. مدل‌ها را در `Settings > Model Provider > Replicate` Dify اضافه کنید. + +
+ +کلید API، کلید API است که در مرحله 2 تنظیم شده است. نام مدل و نسخه مدل را می‌توانید در صفحه جزئیات مدل پیدا کنید: + +
+ + diff --git a/fa/development/models-integration/xinference.md b/fa/development/models-integration/xinference.md new file mode 100644 index 000000000..eb70a0ba3 --- /dev/null +++ b/fa/development/models-integration/xinference.md @@ -0,0 +1,56 @@ +# ادغام مدل‌های محلی مستقر شده توسط Xinference + +[استنباط Xorbits](https://github.com/xorbitsai/inference) یک کتابخانه قدرتمند و همه کاره است که برای خدمت رسانی به مدل‌های زبان، تشخیص گفتار و چند رسانه‌ای طراحی شده است و حتی می‌تواند روی لپ‌تاپ‌ها مورد استفاده قرار گیرد. این کتابخانه از مدل‌های مختلفی که با GGML سازگار هستند، مانند chatglm، baichuan، whisper، vicuna، orca و غیره پشتیبانی می‌کند. Dify از اتصال به استنباط مدل‌های زبانی بزرگ و قابلیت‌های جاسازی Xinference که به طور محلی مستقر شده‌اند، پشتیبانی می‌کند. + +## استقرار Xinference + +لطفاً توجه داشته باشید که معمولاً نیازی به جستجوی دستی آدرس IP کانتینر Docker برای دسترسی به سرویس ندارید، زیرا Docker ویژگی نگاشت پورت را ارائه می‌دهد. این ویژگی به شما امکان می‌دهد پورت‌های کانتینر را به پورت‌های ماشین محلی نگاشت کنید، که دسترسی از طریق آدرس محلی شما را فعال می‌کند. به عنوان مثال، اگر از پارامتر `-p 80:80` هنگام اجرای کانتینر استفاده کردید، می‌توانید با مراجعه به `http://localhost:80` یا `http://127.0.0.1:80` به سرویس داخل کانتینر دسترسی پیدا کنید. + +اگر نیاز دارید مستقیماً از آدرس IP کانتینر استفاده کنید، مراحل بالا به شما در به دست آوردن این اطلاعات کمک خواهد کرد. + +### شروع Xinference + +دو روش برای استقرار Xinference وجود دارد، به نام [استقرار محلی](https://github.com/xorbitsai/inference/blob/main/README.md#local) و [استقرار توزیع شده](https://github.com/xorbitsai/inference/blob/main/README.md#distributed)، در اینجا استقرار محلی را به عنوان مثال می‌آوریم. + +1. اول، Xinference را از طریق PyPI نصب کنید: + + ```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 به طور پیش فرض یک worker به طور محلی شروع خواهد کرد، با نقطه انتهایی: `http://127.0.0.1:9997` و پورت پیش فرض `9997` است. به طور پیش فرض، دسترسی فقط به دستگاه محلی محدود می‌شود، اما می‌توان آن را با `-H 0.0.0.0` پیکربندی کرد تا اجازه دسترسی از هر کلاینت غیر محلی را بدهد. برای تغییر میزبان یا پورت، می‌توانید به اطلاعات راهنمایی xinference مراجعه کنید: `xinference-local --help`. + + > اگر از روش استقرار Dify Docker استفاده می‌کنید، باید به پیکربندی شبکه توجه کنید تا مطمئن شوید که کانتینر Dify می‌تواند به نقطه انتهایی Xinference دسترسی داشته باشد. کانتینر Dify نمی‌تواند به localhost در داخل دسترسی داشته باشد و شما باید از آدرس IP میزبان استفاده کنید. +3. مدل را ایجاد و مستقر کنید + + به `http://127.0.0.1:9997` مراجعه کنید، مدل و مشخصات مورد نیاز خود را برای استقرار انتخاب کنید، همانطور که در زیر نشان داده شده است: + +
+ + از آنجایی که مدل‌های مختلف سازگاری متفاوتی روی پلتفرم‌های سخت افزاری مختلف دارند، لطفاً به [مدل‌های داخلی Xinference](https://inference.readthedocs.io/en/latest/models/builtin/index.html) مراجعه کنید تا مطمئن شوید که مدل ایجاد شده از پلتفرم سخت افزاری فعلی پشتیبانی می‌کند. +4. UID مدل را به دست آورید + + ID مدل را از صفحه `Running Models` کپی کنید، مانند: `2c886330-8849-11ee-9518-43b0b8f40bea` +5. پس از استقرار مدل، مدل مستقر شده را در Dify متصل کنید. + + در `Settings > Model Providers > Xinference`، موارد زیر را وارد کنید: + + * نام مدل: `vicuna-v1.3` + * آدرس سرور: `http://:9997` **با آدرس IP دستگاه خود جایگزین کنید** + * UID مدل: `2c886330-8849-11ee-9518-43b0b8f40bea` + + برای استفاده از مدل در برنامه dify، روی "ذخیره" کلیک کنید. + +Dify از استفاده از [مدل‌های داخلی Xinference](https://github.com/xorbitsai/inference/blob/main/README.md#builtin-models) به عنوان مدل‌های جاسازی نیز پشتیبانی می‌کند، فقط در کادر تنظیمات، نوع جاسازی را انتخاب کنید. + +برای اطلاعات بیشتر در مورد Xinference، لطفاً به [Xorbits Inference](https://github.com/xorbitsai/inference) مراجعه کنید. + + diff --git a/fa/getting-started/cloud.md b/fa/getting-started/cloud.md new file mode 100644 index 000000000..3aba30ab4 --- /dev/null +++ b/fa/getting-started/cloud.md @@ -0,0 +1,35 @@ +# دیفی کلود + + + +{% hint style="info" %} +توجه: دیفی در حال حاضر در مرحله بتا تست قرار دارد. در صورت وجود مغایرت بین مستندات و محصول، لطفاً به تجربه واقعی محصول مراجعه کنید. +{% endhint %} + +دیفی را می توان [مستقیم](https://cloud.dify.ai/apps) به عنوان یک سرویس ابری توسط هر کسی استفاده کرد. [طرح‌ها و قیمت‌گذاری](https://dify.ai/pricing) انعطاف‌پذیر را کشف کنید و طرحی را که با نیازها و الزامات شما مطابقت دارد انتخاب کنید. + +همین حالا با [طرح Sandbox](http://cloud.dify.ai) شروع کنید که شامل یک دوره آزمایشی رایگان 200 تماس OpenAI است، بدون نیاز به کارت اعتباری. برای استفاده از طرح Sandbox نسخه ابری، شما به یک حساب GitHub یا Google و همچنین یک کلید API OpenAI نیاز دارید. در اینجا نحوه شروع کار آورده شده است: + +1. در [دیفی کلود](https://cloud.dify.ai) ثبت نام کنید و یک Workspace جدید ایجاد کنید یا به یک Workspace موجود بپیوندید. +2. ارائه دهنده مدل خود را پیکربندی کنید یا از ارائه دهنده مدل میزبانی شده ما استفاده کنید. +3. اکنون می توانید [یک برنامه ایجاد کنید](../guides/application-orchestrate/creating-an-application.md)! + +### سوالات متداول + +**س: چگونه داده‌های من هنگام استفاده از دیفی کلود مدیریت و ذخیره می‌شود؟** + +ج: هنگام استفاده از دیفی کلود، داده‌های کاربری شما به طور ایمن در سرورهای AWS واقع در منطقه US-East ذخیره می‌شود. این شامل داده‌هایی است که به طور فعال وارد می‌کنید و هر داده‌ای که از برنامه‌های شما تولید می‌شود. ما امنیت و یکپارچگی داده‌های شما را در اولویت قرار می‌دهیم و اطمینان حاصل می‌کنیم که با بالاترین استانداردهای راه‌حل‌های ذخیره‌سازی ابری مدیریت می‌شود. + +**س: چه اقداماتی برای محافظت از کلیدهای API و سایر اطلاعات حساس من انجام می‌شود؟** + +ج: در دیفی، ما اهمیت محافظت از کلیدهای API و سایر اسرار شما را درک می‌کنیم. اینها در حالت سکون رمزگذاری شده‌اند، به این معنی که دیفی نمی‌تواند آنها را ببیند و فقط شما، صاحب حق، به اسرار خود دسترسی دارید. + +**س: می‌توانید توضیح دهید که چگونه داده‌های برنامه در دیفی کلود ناشناس‌سازی می‌شوند؟** + +ج: در دیفی کلود، ما داده‌های برنامه را برای اطمینان از حریم خصوصی و کاهش سربار رمزگذاری و رمزگشایی ناشناس می‌کنیم. این بدان معنی است که داده‌های مورد استفاده توسط برنامه‌ها به طور مستقیم به حساب‌های کاربری قابل شناسایی مرتبط نیستند. با ناشناس‌سازی داده‌ها، حریم خصوصی را افزایش می‌دهیم در حالی که عملکرد خدمات ابری خود را حفظ می‌کنیم. + +**س: فرآیند حذف حساب من و تمام داده‌های مرتبط با آن از دیفی کلود چیست؟** + +ج: اگر تصمیم به حذف حساب خود و حذف تمام داده‌های مرتبط با آن از دیفی کلود گرفتید، می‌توانید به سادگی یک درخواست به تیم پشتیبانی ما در support@dify.ai ارسال کنید. ما متعهد به احترام به حریم خصوصی و حقوق داده‌ای شما هستیم و بر اساس درخواست، تمام داده‌های شما را از سیستم‌های خود پاک می‌کنیم، مطابق با مقررات حفاظت از داده‌ها. + + diff --git a/fa/getting-started/dify-premium-on-aws.md b/fa/getting-started/dify-premium-on-aws.md new file mode 100644 index 000000000..17218078d --- /dev/null +++ b/fa/getting-started/dify-premium-on-aws.md @@ -0,0 +1,37 @@ +# Dify Premium در AWS + +Dify Premium پیشنهاد AMI ما در AWS است که به شما اجازه می‌دهد برندینگ سفارشی داشته باشید و با یک کلیک قابل نصب در VPC AWS شما به عنوان یک EC2 است. برای اشتراک به [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-t22mebxzwjhu6) مراجعه کنید. این در چندین سناریو مفید است: + +* شما به دنبال ایجاد یک یا چند برنامه به عنوان یک کسب و کار کوچک/متوسط هستید و به اقامت داده ها اهمیت می دهید. +* شما به [Dify Cloud](cloud.md) علاقه مند هستید، اما مورد استفاده شما به منابع بیشتری نسبت به آنچه در [برنامه ها](https://dify.ai/pricing) پشتیبانی می شود، نیاز دارد. +* شما می خواهید قبل از پذیرش Dify Enterprise در سازمان خود، یک POC اجرا کنید. + +### تنظیم + +اگر این اولین باری است که به Dify دسترسی پیدا می کنید، برای شروع فرآیند راه اندازی، رمز عبور راه اندازی Admin (که به ID نمونه EC2 شما تنظیم شده است) را وارد کنید. + +پس از استقرار AMI، از طریق IP عمومی نمونه (که در کنسول EC2 یافت می شود) به Dify دسترسی پیدا کنید (به طور پیش فرض از پورت HTTP 80 استفاده می شود). + +### ارتقا + +در نمونه EC2، دستورات زیر را اجرا کنید: + +``` +git clone https://github.com/langgenius/dify.git /tmp/dify +mv -f /tmp/dify/docker/* /dify/ +rm -rf /tmp/dify +docker-compose down +docker-compose pull +docker-compose -f docker-compose.yaml -f docker-compose.override.yaml up -d +``` + +### سفارشی سازی + +مانند استقرار خود میزبانی، می توانید متغیرهای محیطی را در `.env` در نمونه EC2 خود به دلخواه تغییر دهید. سپس Dify را با: + +``` +docker-compose down +ocker-compose -f docker-compose.yaml -f docker-compose.override.yaml up -d +``` + + مجددا راه اندازی کنید. diff --git a/fa/getting-started/install-self-hosted/README.md b/fa/getting-started/install-self-hosted/README.md new file mode 100644 index 000000000..1b54f5100 --- /dev/null +++ b/fa/getting-started/install-self-hosted/README.md @@ -0,0 +1,12 @@ +# جامعه Dify + +Dify یک پروژه متن‌باز بر روی [GitHub](https://github.com/langgenius/dify) هست که می‌توانید به صورت self-hosted با یکی از دو روش زیر راه‌اندازی شود: + +1. [راه‌اندازی توسط Docker Compose](https://docs.dify.ai/getting-started/install-self-hosted/docker-compose) +2. [شروع Local Source Code](https://docs.dify.ai/getting-started/install-self-hosted/local-source-code) + +### مشارکت در پروژه + +برای نگهداری از کیفیت کد، از تمام مشارکت‌‌کننده‌ها - حتی از کسانی که دسترسی مستقیم به کامیت دارند - خواسته می‌شود که تغییرات خود را به صورت (pull requests) ارسال کنند. این درخواست‌ها باید قبل از مرج توسط تیم اصلی بررسی و تأیید شوند. + +ما از مشارکت همه استقبال می‌کنیم! اگر به کمک کردن علاقه‌مند هستید، لطفاً راهنمای [مشارکت](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) ما را برای کسب اطلاعات بیشتر بررسی کنید. \ No newline at end of file diff --git a/fa/getting-started/install-self-hosted/docker-compose.md b/fa/getting-started/install-self-hosted/docker-compose.md new file mode 100644 index 000000000..4d1599a6a --- /dev/null +++ b/fa/getting-started/install-self-hosted/docker-compose.md @@ -0,0 +1,145 @@ +# راه‌اندازی توسط Docker Compose + +## Prerequisites + +> Before installing Dify, make sure your machine meets the following minimum system requirements: +> - CPU >= 2 Core +> - RAM >= 4 GiB + +| Operating System | Software | Explanation | +| -------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| macOS 10.14 or later | Docker Desktop | Set the Docker virtual machine (VM) to use a minimum of 2 virtual CPUs (vCPUs) and 8 GB of initial memory. Otherwise, the installation may fail. For more information, please refer to the [Docker Desktop installation guide for Mac](https://docs.docker.com/desktop/mac/install/). | +| Linux platforms |

Docker 19.03 or later
Docker Compose 1.28 or later

| Please refer to the [Docker installation guide](https://docs.docker.com/engine/install/) and [the Docker Compose installation guide](https://docs.docker.com/compose/install/) for more information on how to install Docker and Docker Compose, respectively. | +| Windows with WSL 2 enabled | Docker Desktop | We recommend storing the source code and other data that is bound to Linux containers in the Linux file system rather than the Windows file system. For more information, please refer to the [Docker Desktop installation guide for using the WSL 2 backend on Windows.](https://docs.docker.com/desktop/windows/install/#wsl-2-backend) | + +> \[!IMPORTANT] +> +> Dify 0.6.12 has introduced significant enhancements to Docker Compose deployment, designed to improve your setup and update experience. For more information, read the [README.md](https://github.com/langgenius/dify/blob/main/docker/README.md). + +### Clone Dify + +Clone the Dify source code to your local machine: + +```bash +git clone https://github.com/langgenius/dify.git +``` + +### Starting Dify + +1. Navigate to the Docker directory in the Dify source code + + ```bash + cd dify/docker + ``` + +2. Copy the environment configuration file + + ```bash + cp .env.example .env + ``` + +3. Start the Docker containers + + Choose the appropriate command to start the containers based on the Docker Compose version on your system. You can use the `$ docker compose version` command to check the version, and refer to the [Docker documentation](https://docs.docker.com/compose/install/) for more information: + + - If you have Docker Compose V2, use the following command: + + ```bash + docker compose up -d + ``` + + - If you have Docker Compose V1, use the following command: + + ```bash + docker-compose up -d + ``` + +After executing the command, you should see output similar to the following, showing the status and port mappings of all containers: + +```bash +[+] Running 11/11 + ✔ Network docker_ssrf_proxy_network Created 0.1s + ✔ Network docker_default Created 0.0s + ✔ Container docker-redis-1 Started 2.4s + ✔ Container docker-ssrf_proxy-1 Started 2.8s + ✔ Container docker-sandbox-1 Started 2.7s + ✔ Container docker-web-1 Started 2.7s + ✔ Container docker-weaviate-1 Started 2.4s + ✔ Container docker-db-1 Started 2.7s + ✔ Container docker-api-1 Started 6.5s + ✔ Container docker-worker-1 Started 6.4s + ✔ Container docker-nginx-1 Started 7.1s +``` + +Finally, check if all containers are running successfully: + +```bash +docker compose ps +``` + +This includes 3 core services: `api / worker / web`, and 6 dependent components: `weaviate / db / redis / nginx / ssrf_proxy / sandbox` . + +```bash +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS +docker-api-1 langgenius/dify-api:0.6.13 "/bin/bash /entrypoi…" api About a minute ago Up About a minute 5001/tcp +docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db About a minute ago Up About a minute (healthy) 5432/tcp +docker-nginx-1 nginx:latest "sh -c 'cp /docker-e…" nginx About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp +docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis About a minute ago Up About a minute (healthy) 6379/tcp +docker-sandbox-1 langgenius/dify-sandbox:0.2.1 "/main" sandbox About a minute ago Up About a minute +docker-ssrf_proxy-1 ubuntu/squid:latest "sh -c 'cp /docker-e…" ssrf_proxy About a minute ago Up About a minute 3128/tcp +docker-weaviate-1 semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" weaviate About a minute ago Up About a minute +docker-web-1 langgenius/dify-web:0.6.13 "/bin/sh ./entrypoin…" web About a minute ago Up About a minute 3000/tcp +docker-worker-1 langgenius/dify-api:0.6.13 "/bin/bash /entrypoi…" worker About a minute ago Up About a minute 5001/tcp +``` + +With these steps, you should be able to install Dify successfully. + +### Upgrade Dify + +Enter the docker directory of the dify source code and execute the following commands: + +```bash +cd dify/docker +docker compose down +git pull origin main +docker compose pull +docker compose up -d +``` + +#### Sync Environment Variable Configuration (Important) + +* If the `.env.example` file has been updated, be sure to modify your local `.env` file accordingly. +* Check and modify the configuration items in the `.env` file as needed to ensure they match your actual environment. You may need to add any new variables from `.env.example` to your `.env` file, and update any values that have changed. + +### Access Dify + +Access administrator initialization page to set up the admin account: + +```bash +# Local environment +http://localhost/install + +# Server environment +http://your_server_ip/install +``` + +Dify web interface address: + +```bash +# Local environment +http://localhost + +# Server environment +http://your_server_ip +``` + +### Customize Dify + +Edit the environment variable values in your `.env` file directly. Then, restart Dify with: + +``` +docker compose down +docker compose up -d +``` + +The full set of annotated environment variables along can be found under docker/.env.example. diff --git a/fa/getting-started/install-self-hosted/environments.md b/fa/getting-started/install-self-hosted/environments.md new file mode 100644 index 000000000..59dd7fa02 --- /dev/null +++ b/fa/getting-started/install-self-hosted/environments.md @@ -0,0 +1,593 @@ +# محيط‌ها + +### متغيرهاي رايج + +#### CONSOLE_API_URL + +آدرس URL سرور پشتيبان API کنسول. اين آدرس براي ساختن فراخواني مجدد تاييد هويت استفاده می‌شود. در صورت خالي گذاشتن، به طور پیش‌فرض به دامنه اي همانند برنامه تطبيق داده می‌شود. مثال: `https://api.console.dify.ai` + +#### CONSOLE_WEB_URL + +آدرس URL رابط وب کنسول در سمت کلاینت. اين آدرس براي ساختن آدرس‌های سمت کلاینت و پیکربندی CORS استفاده می‌شود. در صورت خالي گذاشتن، به طور پیش‌فرض به دامنه اي همانند برنامه تطبيق داده می‌شود. مثال: `https://console.dify.ai` + +#### SERVICE_API_URL + +آدرس URL API سرويس، که براي نمايش آدرس پايه API سرويس در سمت کلاینت استفاده می‌شود. در صورت خالي گذاشتن، به طور پیش‌فرض به دامنه اي همانند برنامه تطبيق داده می‌شود. مثال: `https://api.dify.ai` + +#### APP_API_URL + +آدرس URL سرور پشتيبان API برنامه وب، که براي مشخص کردن آدرس URL سرور پشتيبان API برنامه وب در سمت کلاینت استفاده می‌شود. در صورت خالي گذاشتن، به طور پیش‌فرض به دامنه اي همانند برنامه تطبيق داده می‌شود. مثال: `https://app.dify.ai` + +#### APP_WEB_URL + +آدرس URL برنامه وب، که براي نمايش پيش‌نمايش يا دانلود فايل در سمت کلاینت يا به عنوان ورودي مدل‌هاي چندرسانه‌اي استفاده می‌شود؛ در صورت خالي گذاشتن، به طور پیش‌فرض به دامنه اي همانند برنامه تطبيق داده می‌شود. مثال: `https://udify.app/` + +#### FILES_URL + +پيشوند آدرس URL پيش‌نمايش يا دانلود فايل، که براي نمايش اين آدرس‌ها در سمت کلاینت و ارائه آن‌ها به عنوان ورودي براي مدل‌هاي چندرسانه‌اي استفاده می‌شود. به منظور جلوگيري از جعل، آدرس URL پيش‌نمايش تصوير امضا می‌شود و پس از 5 دقيقه منقضي خواهد شد. + +*** + +### سرور + +#### MODE + +حالت راه اندازي: اين فقط زماني در دسترس است که با استفاده از docker راه اندازي شده باشد. در صورت اجرا از کد منبع، قابل اعمال نيست. + +- api + + شروع سرور API. + +- worker + + شروع کارگر صف ناهمزمان. + +#### DEBUG + +حالت اشکال زدایی: به طور پیش‌فرض غیرفعال است. توصیه می‌شود این تنظیم را در حین توسعه محلی فعال کنید تا از مشکلات ناشی از وصله میمون جلوگیری شود. + +#### FLASK_DEBUG + +حالت اشکال زدایی Flask: هنگام فعال شدن، اطلاعات ردیابی را در پاسخ‌های API خروجی می‌دهد و اشکال زدایی را آسان‌تر می‌کند. + +#### SECRET_KEY + +یک کلید مخفی که برای امضای ایمن کوکی‌های جلسه و رمزگذاری اطلاعات حساس در پایگاه داده استفاده می‌شود. + +این متغیر باید قبل از اولین راه اندازی تنظیم شود. + +برای تولید یک کلید قوی برای آن، `openssl rand -base64 42` را اجرا کنید. + +#### DEPLOY_ENV + +محیط استقرار: + +- PRODUCTION (پیش‌فرض) + + محیط تولید. + +- TESTING + + محیط آزمایش. یک برچسب رنگی متمایز در صفحه سمت کلاینت وجود خواهد داشت که نشان می‌دهد این محیط یک محیط آزمایشی است. + +#### LOG_LEVEL + +سطح خروجی لاگ. پیش‌فرض INFO است. برای محیط‌های تولید، توصیه می‌شود این را به ERROR تنظیم کنید. + +#### MIGRATION_ENABLED + +هنگامی که به true تنظیم شود، مهاجرت‌های پایگاه داده به طور خودکار هنگام راه اندازی ظرف اجرا می‌شوند. این فقط زماني در دسترس است که با استفاده از docker راه اندازي شده باشد و در صورت اجرا از کد منبع، قابل اعمال نيست. + +برای راه اندازی کد منبع، باید `flask db upgrade` را به صورت دستی در دایرکتوری api اجرا کنید. + +#### CHECK_UPDATE_URL + +سیاست بررسی نسخه را کنترل می‌کند. اگر به false تنظیم شود، سیستم برای بررسی وجود به روز رسانی ها به `https://updates.dify.ai` تماس نخواهد گرفت. + +در حال حاضر، رابط بررسی نسخه مبتنی بر CloudFlare Worker به طور مستقیم در چین قابل دسترسی نیست. تنظیم این متغیر به یک مقدار خالی این فراخوانی API را غیرفعال می‌کند. + +#### TEXT\_GENERATION\_TIMEOUT\_MS + +مقدار پیش‌فرض: 60000 (میلی ثانیه). مدت زمان خاتمه برای تولید متن و فرایندهای گردش کار را مشخص می‌کند. این تنظیم از اختلالات سرویس در سطح سیستم که به دلیل فرایندهای فردی که زمان اختصاص داده شده به آن‌ها را تجاوز می‌کنند جلوگیری می‌کند. + +#### OPENAI_API_BASE + +برای تغییر آدرس پایه OpenAI استفاده می‌شود، پیش‌فرض [https://api.openai.com/v1](https://api.openai.com/v1) است. + +هنگامی که OpenAI در چین قابل دسترسی نیست، آن را با یک آدرس آینه داخلی جایگزین کنید، یا زمانی که یک مدل محلی API سازگار با OpenAI ارائه می‌دهد، می‌توان آن را جایگزین کرد. + +#### پیکربندی مرتبط با راه اندازی ظرف + +فقط هنگام شروع با تصویر docker یا docker-compose مؤثر است. + +- DIFY_BIND_ADDRESS + + آدرس اتصال سرویس API، پیش‌فرض: 0.0.0.0، یعنی همه آدرس‌ها قابل دسترسی هستند. + +- DIFY_PORT + + شماره پورت اتصال سرویس API، پیش‌فرض به 5001. + +- SERVER_WORKER_AMOUNT + + تعداد کارگران سرور API، یعنی تعداد کارگران gevent. فرمول: `تعداد هسته‌های CPU x 2 + 1` + + مراجعه: [https://docs.gunicorn.org/en/stable/design.html#how-many-workers](https://docs.gunicorn.org/en/stable/design.html#how-many-workers) + +- SERVER_WORKER_CLASS + + پیش‌فرض gevent است. اگر از ویندوز استفاده می‌کنید، می‌توان آن را به sync یا solo تغییر داد. + +- GUNICORN_TIMEOUT + + مدت زمان خاتمه رسیدگی به درخواست. پیش‌فرض 200 است. مقدار توصیه شده 360 برای پشتیبانی از زمان‌های طولانی‌تر اتصال SSE (وقایع ارسال شده توسط سرور) است. + +- CELERY_WORKER_CLASS + + مشابه `SERVER_WORKER_CLASS`. پیش‌فرض gevent است. اگر از ویندوز استفاده می‌کنید، می‌توان آن را به sync یا solo تغییر داد. + +- CELERY_WORKER_AMOUNT + + تعداد کارگران Celery. پیش‌فرض 1 است و می‌تواند به طور دلخواه تنظیم شود. + +#### پیکربندی پایگاه داده + +پایگاه داده از PostgreSQL استفاده می‌کند. لطفاً از طرح عمومی استفاده کنید. + +- 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 برای ذخیره سازی در حافظه نهان و انتشار/اشتراک در طول مکالمه استفاده می‌شود. + +- REDIS_HOST: هاست Redis +- REDIS_PORT: پورت Redis، پیش‌فرض 6379 است +- REDIS_DB: پایگاه داده Redis، پیش‌فرض 0 است. لطفاً از یک پایگاه داده متفاوت از Redis جلسه و Celery Broker استفاده کنید. +- REDIS_USERNAME: نام کاربری Redis، پیش‌فرض خالی است +- REDIS_PASSWORD: رمز عبور Redis، پیش‌فرض خالی است. توصیه می‌شود یک رمز عبور تنظیم کنید. +- REDIS_USE_SSL: آیا از پروتکل SSL برای اتصال استفاده شود، پیش‌فرض false است +- REDIS_USE_SENTINEL: از Redis Sentinel برای اتصال به سرورهای Redis استفاده کنید +- REDIS_SENTINELS: گره‌های Sentinel، فرمت: `<آدرس IP Sentinel1>:<پورت Sentinel1>,<آدرس IP Sentinel2>:<پورت Sentinel2>,<آدرس IP Sentinel3>:<پورت Sentinel3>` +- REDIS_SENTINEL_SERVICE_NAME: نام سرویس Sentinel، همان نام Master +- REDIS_SENTINEL_USERNAME: نام کاربری Sentinel +- REDIS_SENTINEL_PASSWORD: رمز عبور Sentinel +- REDIS_SENTINEL_SOCKET_TIMEOUT: زمان خاتمه Sentinel، مقدار پیش‌فرض: 0.1، واحد: ثانیه + + +#### پیکربندی Celery + +- CELERY_BROKER_URL + + فرمت به صورت زیر (حالت اتصال مستقیم): + + ``` + redis://<نام کاربری Redis>:<رمز عبور Redis>@<هاست Redis>:<پورت Redis>/<پایگاه داده Redis> + ``` + + مثال: `redis://:difyai123456@redis:6379/1` + + حالت Sentinel: + + ``` + sentinel://<نام کاربری Sentinel>:<رمز عبور Sentinel>@<هاست Sentinel>:<پورت Sentinel>/<پایگاه داده Redis> + ``` + + مثال: `sentinel://localhost:26379/1;sentinel://localhost:26380/1;sentinel://localhost:26381/1` + +- BROKER_USE_SSL + + اگر به true تنظیم شود، از پروتکل SSL برای اتصال استفاده می‌شود، پیش‌فرض false است + +- CELERY_USE_SENTINEL + + اگر به true تنظیم شود، حالت Sentinel فعال می‌شود، پیش‌فرض false است + +- CELERY_SENTINEL_MASTER_NAME + + نام سرویس Sentinel، یعنی نام Master + +- CELERY_SENTINEL_SOCKET_TIMEOUT + + زمان خاتمه اتصال به Sentinel، مقدار پیش‌فرض: 0.1، واحد: ثانیه + +#### پیکربندی CORS + +برای تنظیم سیاست دسترسی متقابل دامنه سمت کلاینت استفاده می‌شود. + +- CONSOLE_CORS_ALLOW_ORIGINS + + سیاست متقابل دامنه CORS کنسول، پیش‌فرض `*` است، یعنی همه دامنه‌ها می‌توانند دسترسی داشته باشند. + +- WEB_API_CORS_ALLOW_ORIGINS + + سیاست متقابل دامنه CORS برنامه وب، پیش‌فرض `*` است، یعنی همه دامنه‌ها می‌توانند دسترسی داشته باشند. + +#### پیکربندی ذخیره سازی فایل + +برای ذخیره سازی فایل‌های مجموعه داده آپلود شده، کلیدهای رمزگذاری تیم/مستاجر و سایر فایل‌ها استفاده می‌شود. + +- STORAGE_TYPE + + نوع امکان ذخیره سازی + + - local (پیش‌فرض) + + ذخیره سازی فایل محلی، اگر این گزینه انتخاب شود، پیکربندی `STORAGE_LOCAL_PATH` زیر باید تنظیم شود. + + - s3 + + ذخیره سازی شی S3، اگر این گزینه انتخاب شود، پیکربندی‌های S3\_ پیشوند زیر باید تنظیم شوند. + + - azure-blob + + ذخیره سازی شی Azure Blob، اگر این گزینه انتخاب شود، پیکربندی‌های AZURE_BLOB\_ پیشوند زیر باید تنظیم شوند. + + - huawei-obs + + ذخیره سازی شی Huawei OBS، اگر این گزینه انتخاب شود، پیکربندی‌های HUAWEI_OBS\_ پیشوند زیر باید تنظیم شوند. + + - volcengine-tos + + ذخیره سازی شی Volcengine TOS، اگر این گزینه انتخاب شود، پیکربندی‌های VOLCENGINE_TOS\_ پیشوند زیر باید تنظیم شوند. + +- STORAGE_LOCAL_PATH + + پیش‌فرض storage است، یعنی در دایرکتوری storage دایرکتوری فعلی ذخیره می‌شود. + + اگر شما با docker یا docker-compose استقرار می‌دهید، مطمئن شوید که دایرکتوری `/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' +- ALIYUN_OSS_BUCKET_NAME: نام سطل شما، مانند 'difyai' +- ALIYUN_OSS_ACCESS_KEY: کلید دسترسی شما، مانند 'difyai' +- ALIYUN_OSS_SECRET_KEY: کلید مخفی شما، مانند 'difyai' +- ALIYUN_OSS_ENDPOINT: https://oss-ap-southeast-1-internal.aliyuncs.com # مرجع: https://www.alibabacloud.com/help/en/oss/user-guide/regions-and-endpoints +- ALIYUN_OSS_REGION: ap-southeast-1 # مرجع: https://www.alibabacloud.com/help/en/oss/user-guide/regions-and-endpoints +- ALIYUN_OSS_AUTH_VERSION: v4 +- ALIYUN_OSS_PATH: مسیر شما # با '/' شروع نکنید. OSS از اسلش در ابتدای نام شی پشتیبانی نمی‌کند. مرجع: https://www.alibabacloud.com/help/en/oss/support/0016-00000005 +- HUAWEI_OBS_BUCKET_NAME: نام سطل شما، مانند 'difyai' +- HUAWEI_OBS_SECRET_KEY: کلید مخفی شما، مانند 'difyai' +- HUAWEI_OBS_ACCESS_KEY: کلید دسترسی شما، مانند 'difyai' +- HUAWEI_OBS_SERVER: آدرس URL سرور شما # مرجع: https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0500.html +- VOLCENGINE_TOS_BUCKET_NAME: نام سطل شما، مانند 'difyai' +- VOLCENGINE_TOS_SECRET_KEY: کلید مخفی شما، مانند 'difyai' +- VOLCENGINE_TOS_ACCESS_KEY: کلید دسترسی شما، مانند 'difyai' +- VOLCENGINE_TOS_REGION: منطقه شما، مانند 'cn-guangzhou' # مرجع: https://www.volcengine.com/docs/6349/107356 +- VOLCENGINE_TOS_ENDPOINT: نقطه پایانی شما، مانند 'tos-cn-guangzhou.volces.com' # مرجع: https://www.volcengine.com/docs/6349/107356 + +#### پیکربندی پایگاه داده برداری + +- VECTOR_STORE + - **انواع شمارش قابل دسترس عبارتند از:** + - `weaviate` + - `qdrant` + - `milvus` + - `zilliz` (همان پیکربندی `milvus` را به اشتراک می‌گذارد) + - `myscale` + - `pinecone` (هنوز باز نشده است) + - `analyticdb` +- WEAVIATE_ENDPOINT + + آدرس نقطه پایانی Weaviate، مانند: `http://weaviate:8080`. + +- WEAVIATE_API_KEY + + احراز هویت api-key که برای اتصال به Weaviate استفاده می‌شود. + +- WEAVIATE_BATCH_SIZE + + تعداد اشیاء شاخص که در دسته‌ها در Weaviate ایجاد می‌شوند، پیش‌فرض 100 است. + + به این سند مراجعه کنید: [https://weaviate.io/developers/weaviate/manage-data/import#how-to-set-batch-parameters](https://weaviate.io/developers/weaviate/manage-data/import#how-to-set-batch-parameters) + +- WEAVIATE_GRPC_ENABLED + + آیا از روش gRPC برای تعامل با Weaviate استفاده شود، عملکرد هنگام فعال شدن به طور قابل توجهی افزایش می‌یابد، ممکن است در محلي قابل استفاده نباشد، پیش‌فرض true است. + +- QDRANT_URL + + آدرس نقطه پایانی Qdrant، مانند: `https://your-qdrant-cluster-url.qdrant.tech/` + +- QDRANT_API_KEY + + احراز هویت api-key که برای اتصال به Qdrant استفاده می‌شود. + +- PINECONE_API_KEY + + احراز هویت api-key که برای اتصال به Pinecone استفاده می‌شود. + +- PINECONE_ENVIRONMENT + + محیطی که Pinecone در آن قرار دارد، مانند: `us-east4-gcp` + +- MILVUS_URI + + پیکربندی uri Milvus. مثلاً http://localhost:19530. برای Zilliz Cloud، uri و token را به [نقطه پایانی عمومی و کلید Api](https://docs.zilliz.com/docs/on-zilliz-cloud-console#free-cluster-details) تنظیم کنید. + +- MILVUS_TOKEN + + پیکربندی token Milvus، پیش‌فرض خالی است. + +- MILVUS_USER + + پیکربندی کاربری Milvus، پیش‌فرض خالی است. + +- MILVUS_PASSWORD + + پیکربندی رمز عبور Milvus، پیش‌فرض خالی است. + +- MYSCALE_HOST + + پیکربندی هاست MyScale. + +- MYSCALE_PORT + + پیکربندی پورت MyScale. + +- MYSCALE_USER + + پیکربندی کاربری MyScale، پیش‌فرض `default` است. + +- MYSCALE_PASSWORD + + پیکربندی رمز عبور MyScale، پیش‌فرض خالی است. + +- MYSCALE_DATABASE + + پیکربندی پایگاه داده MyScale، پیش‌فرض `default` است. + +- MYSCALE_FTS_PARAMS + + پارامترهای جستجوی متنی MyScale، برای پشتیبانی از چند زبان، [مستندات MyScale](https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters) را بررسی کنید، پیش‌فرض خالی است. + +- ANALYTICDB_KEY_ID + + شناسه کلید دسترسی که برای احراز هویت OpenAPI علی بابا استفاده می‌شود. برای ایجاد AccessKey خود، [مستندات Analyticdb](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/support/create-an-accesskey-pair) را مطالعه کنید. + +- ANALYTICDB_KEY_SECRET + + راز کلید دسترسی که برای احراز هویت OpenAPI علی بابا استفاده می‌شود. + +- ANALYTICDB_INSTANCE_ID + + شناسه منحصر به فرد نمونه AnalyticDB شما، مانند: `gp-xxxxxx`. برای ایجاد نمونه خود، [مستندات Analyticdb](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/create-an-instance-1) را مطالعه کنید. + +- ANALYTICDB_REGION_ID + + شناسه منطقه‌ای که نمونه AnalyticDB در آن قرار دارد، مانند: `cn-hangzhou`. + +- ANALYTICDB_ACCOUNT + + نام حساب استفاده شده برای اتصال به نمونه AnalyticDB. برای ایجاد یک حساب، [مستندات Analyticdb](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/createa-a-privileged-account) را مطالعه کنید. + +- ANALYTICDB_PASSWORD + + رمز عبور حساب استفاده شده برای اتصال به نمونه AnalyticDB. + +- ANALYTICDB_NAMESPACE + + فضای نام (طرح) در داخل نمونه AnalyticDB که می‌خواهید با آن تعامل داشته باشید، مانند `dify`. اگر این فضای نام وجود ندارد، به طور خودکار ایجاد می‌شود. + +- ANALYTICDB_NAMESPACE_PASSWORD + + رمز عبور فضای نام (طرح). اگر فضای نام وجود ندارد، با این رمز عبور ایجاد می‌شود. + +#### پیکربندی دانش + +- UPLOAD_FILE_SIZE_LIMIT: + + حداکثر اندازه فایل آپلود، پیش‌فرض 15 مگابایت. + +- UPLOAD_FILE_BATCH_LIMIT + + حداکثر تعداد فایل‌هایی که می‌توانند به طور همزمان آپلود شوند، پیش‌فرض 5. + +- ETL_TYPE + + **انواع شمارش قابل دسترس:** + + - dify + + طرح استخراج فایل اختصاصی Dify + + - Unstructured + + طرح استخراج فایل Unstructured.io + +- UNSTRUCTURED_API_URL + + مسیر API Unstructured، باید هنگام ETL_TYPE Unstructured تنظیم شود. + + مثلاً: `http://unstructured:8000/general/v0/general` + +#### پیکربندی چندرسانه‌اي + +- MULTIMODAL_SEND_IMAGE_FORMAT + + فرمت تصویری که هنگام ورودی مدل چندرسانه‌اي ارسال می‌شود، پیش‌فرض `base64` است، گزینه `url` نیز وجود دارد. تأخیر تماس در حالت `url` کمتر از حالت `base64` خواهد بود. به طور کلی توصیه می‌شود از حالت `base64` سازگارتر استفاده کنید. اگر به عنوان `url` پیکربندی شده باشد، باید `FILES_URL` را به عنوان یک آدرس قابل دسترسی از خارج تنظیم کنید تا مدل چندرسانه‌اي بتواند به تصویر دسترسی داشته باشد. + +- UPLOAD_IMAGE_FILE_SIZE_LIMIT + + حداکثر اندازه فایل تصویر آپلود، پیش‌فرض 10 مگابایت. + +#### پیکربندی Sentry + +برای نظارت بر برنامه و ردیابی لاگ خطا استفاده می‌شود. + +- SENTRY_DSN + + آدرس DSN Sentry، پیش‌فرض خالی است، هنگام خالی بودن، تمام اطلاعات نظارت به Sentry گزارش نمی‌شود. + +- SENTRY_TRACES_SAMPLE_RATE + + نسبت گزارش رویدادهای Sentry، اگر 0.01 باشد، 1٪ است. + +- SENTRY_PROFILES_SAMPLE_RATE + + نسبت گزارش نمایه‌های Sentry، اگر 0.01 باشد، 1٪ است. + +#### پیکربندی ادغام Notion + +متغیرهای پیکربندی ادغام Notion را می‌توان با درخواست ادغام Notion به دست آورد: [https://www.notion.so/my-integrations](https://www.notion.so/my-integrations) + +- NOTION_INTEGRATION_TYPE: به عنوان "public" یا "internal" پیکربندی کنید. از آنجایی که URL هدایت مجدد OAuth Notion فقط از HTTPS پشتیبانی می‌کند، اگر به صورت محلی استقرار می‌دهید، لطفاً از ادغام داخلی Notion استفاده کنید. +- NOTION_CLIENT_SECRET: راز مشتری OAuth Notion (برای نوع ادغام عمومی استفاده می‌شود) +- NOTION_CLIENT_ID: شناسه مشتری OAuth (برای نوع ادغام عمومی استفاده می‌شود) +- NOTION_INTERNAL_SECRET: راز ادغام داخلی Notion. اگر مقدار `NOTION_INTEGRATION_TYPE` "internal" باشد، باید این متغیر را پیکربندی کنید. + +#### پیکربندی مرتبط با ایمیل + +- MAIL_TYPE + - resend + - MAIL_DEFAULT_SEND_FROM\ + نام ایمیل فرستنده، مانند: no-reply [no-reply@dify.ai](mailto:no-reply@dify.ai)، اجباری نیست. + - RESEND_API_KEY\ + API-Key برای ارائه دهنده ایمیل Resend، را می‌توان از API-Key به دست آورد. + - smtp + - SMTP_SERVER\ + آدرس سرور SMTP + - SMTP_PORT\ + شماره پورت سرور SMTP + - SMTP_USERNAME\ + نام کاربری SMTP + - SMTP_PASSWORD\ + رمز عبور SMTP + - SMTP_USE_TLS\ + آیا از TLS استفاده شود، پیش‌فرض false است + - MAIL_DEFAULT_SEND_FROM\ + نام ایمیل فرستنده، مانند: no-reply [no-reply@dify.ai](mailto:no-reply@dify.ai)، اجباری نیست. + +#### پیکربندی موقعیت ارائه دهنده مدل و ابزار + +برای مشخص کردن ارائه دهندگان مدل و ابزارهایی که می‌توانند در برنامه استفاده شوند، استفاده می‌شود. این تنظیمات به شما امکان می‌دهد که ارائه دهندگان مدل و ابزارهایی را که در دسترس هستند سفارشی کنید، و همچنین ترتیب و گنجاندن/استثنا آن‌ها را در رابط برنامه تنظیم کنید. + +برای مشاهده لیست [ابزارها](https://github.com/langgenius/dify/blob/main/api/core/tools/provider/_position.yaml) و [ارائه دهندگان مدل](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/model_providers/_position.yaml) موجود، لطفاً به پیوندهای ارائه شده مراجعه کنید. + +- POSITION_TOOL_PINS + + ابزارهای خاصی را در بالای لیست پین کنید، و مطمئن شوید که در رابط برنامه اول ظاهر می‌شوند. (از مقادیر جدا شده با کاما با **بدون فاصله** بین آیتم‌ها استفاده کنید.) + + مثال: `POSITION_TOOL_PINS=bing,google` + +- POSITION_TOOL_INCLUDES + + ابزارهایی را که باید در برنامه گنجانده شوند مشخص کنید. فقط ابزارهایی که در اینجا لیست شده‌اند برای استفاده در دسترس خواهند بود. اگر تنظیم نشده باشد، تمام ابزارها به جز موارد ذکر شده در POSITION_TOOL_EXCLUDES گنجانده می‌شوند. (از مقادیر جدا شده با کاما با **بدون فاصله** بین آیتم‌ها استفاده کنید.) + + مثال: `POSITION_TOOL_INCLUDES=bing,google` + +- POSITION_TOOL_EXCLUDES + + ابزارهای خاصی را از نمایش یا استفاده در برنامه مستثنی کنید. ابزارهایی که در اینجا لیست شده‌اند، به جز ابزارهای پین شده، از گزینه‌های موجود حذف می‌شوند. (از مقادیر جدا شده با کاما با **بدون فاصله** بین آیتم‌ها استفاده کنید.) + + مثال: `POSITION_TOOL_EXCLUDES=yahoo,wolframalpha` + +- POSITION_PROVIDER_PINS + + ارائه دهندگان مدل خاصی را در بالای لیست پین کنید، و مطمئن شوید که در رابط برنامه اول ظاهر می‌شوند. (از مقادیر جدا شده با کاما با **بدون فاصله** بین آیتم‌ها استفاده کنید.) + + مثال: `POSITION_PROVIDER_PINS=openai,openllm` + +- POSITION_PROVIDER_INCLUDES + + ارائه دهندگان مدل را که باید در برنامه گنجانده شوند مشخص کنید. فقط ارائه دهندگانی که در اینجا لیست شده‌اند برای استفاده در دسترس خواهند بود. اگر تنظیم نشده باشد، تمام ارائه دهندگان به جز موارد ذکر شده در POSITION_PROVIDER_EXCLUDES گنجانده می‌شوند. (از مقادیر جدا شده با کاما با **بدون فاصله** بین آیتم‌ها استفاده کنید.) + + مثال: `POSITION_PROVIDER_INCLUDES=cohere,upstage` + +- POSITION_PROVIDER_EXCLUDES + + ارائه دهندگان مدل خاصی را از نمایش یا استفاده در برنامه مستثنی کنید. ارائه دهندگانی که در اینجا لیست شده‌اند، به جز ارائه دهندگان پین شده، از گزینه‌های موجود حذف می‌شوند. (از مقادیر جدا شده با کاما با **بدون فاصله** بین آیتم‌ها استفاده کنید.) + + مثال: `POSITION_PROVIDER_EXCLUDES=openrouter,ollama` + +#### سایر + +- INVITE_EXPIRY_HOURS: مدت زمان معتبر لینک دعوت عضویت (ساعت)، پیش‌فرض: 72. +- HTTP\_REQUEST_NODE_MAX_TEXT_SIZE:حداکثر اندازه متن گره درخواست HTTP در گردش کار، پیش‌فرض 1 مگابایت. +- HTTP\_REQUEST_NODE_MAX_BINARY_SIZE:حداکثر اندازه باینری گره‌های درخواست HTTP در گردش کار، پیش‌فرض 10 مگابایت. + +--- + +### رابط وب سمت کلاینت + +#### SENTRY_DSN + +آدرس DSN Sentry، پیش‌فرض خالی است، هنگام خالی بودن، تمام اطلاعات نظارت به Sentry گزارش نمی‌شود. + +## منسوخ شده + +#### CONSOLE_URL + +> ⚠️ در 0.3.8 اصلاح شد، در 0.4.9 منسوخ خواهد شد، با: `CONSOLE_API_URL` و `CONSOLE_WEB_URL` جایگزین می‌شود. + +آدرس URL کنسول، که برای الحاق فراخواني مجدد تاييد هويت، آدرس سمت کلاینت کنسول و استفاده از پیکربندی CORS استفاده می‌شود. اگر خالی باشد، همان دامنه است. مثال: `https://console.dify.ai`. + +#### API_URL + +> ⚠️ در 0.3.8 اصلاح شد، در 0.4.9 منسوخ خواهد شد، با `SERVICE_API_URL` جایگزین می‌شود. + +آدرس URL API، که برای نمایش آدرس پايه API سرویس به سمت کلاینت استفاده می‌شود. اگر خالی باشد، همان دامنه است. مثال: `https://api.dify.ai` + +#### APP_URL + +> ⚠️ در 0.3.8 اصلاح شد، در 0.4.9 منسوخ خواهد شد، با `APP_API_URL` و `APP_WEB_URL` جایگزین می‌شود. + +آدرس URL برنامه وب، که برای نمایش آدرس پايه API برنامه وب به سمت کلاینت استفاده می‌شود. اگر خالی باشد، همان دامنه است. مثال: `https://udify.app/` + +#### پیکربندی جلسه + +> ⚠️ این پیکربندی از نسخه 0.3.24 به بعد دیگر معتبر نیست. + +فقط توسط سرویس API برای تأیید هویت رابط استفاده می‌شود. + +- SESSION_TYPE: + + نوع مؤلفه جلسه + + - redis (پیش‌فرض) + + اگر این را انتخاب کنید، باید متغیرهای محیطی زیر را که با SESSION_REDIS\_ شروع می‌شوند تنظیم کنید. + + - sqlalchemy + + اگر این را انتخاب کنید، اتصال فعلی پایگاه داده استفاده می‌شود و از جدول sessions برای خواندن و نوشتن سوابق جلسه استفاده می‌شود. + +- SESSION_REDIS_HOST: هاست Redis +- SESSION_REDIS_PORT: پورت Redis، پیش‌فرض 6379 است +- SESSION_REDIS_DB: پایگاه داده Redis، پیش‌فرض 0 است. لطفاً از یک پایگاه داده متفاوت از Redis و Celery Broker استفاده کنید. +- SESSION_REDIS_USERNAME: نام کاربری Redis، پیش‌فرض خالی است +- SESSION_REDIS_PASSWORD: رمز عبور 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/fa/getting-started/install-self-hosted/faqs.md b/fa/getting-started/install-self-hosted/faqs.md new file mode 100644 index 000000000..bf1eea6a5 --- /dev/null +++ b/fa/getting-started/install-self-hosted/faqs.md @@ -0,0 +1,18 @@ +# سوالات متداول + +### 1. دریافت نکردن ایمیل‌های رمز عبور جدید + +لازم است پارامترهای `Mail` را در فایل `.env` پیکربندی کنید. برای راهنمایی‌های دقیق، لطفا به ["شرح متغیرهای محیطی: پیکربندی مربوط به ایمیل"](https://docs.dify.ai/getting-started/install-self-hosted/environments#mail-related-configuration) مراجعه کنید. + +پس از اصلاح پیکربندی، دستورات زیر را برای راه اندازی مجدد سرویس اجرا کنید: + +```bash +docker compose down +docker compose up -d +``` + +اگر هنوز ایمیل را دریافت نکرده‌اید، لطفا بررسی کنید که سرویس ایمیل به درستی کار می‌کند و اینکه ایمیل در لیست سطل زباله قرار داده نشده است. + +### 2. نحوه برخورد با پیچیدگی بیش از حد گردش کار و تجاوز به محدودیت گره + +در نسخه جامعه، می‌توانید محدودیت MAX\_TREE\_DEPTH را برای عمق هر شاخه به صورت دستی در `web/app/components/workflow/constants.ts.` تنظیم کنید. مقدار پیش‌فرض ما 50 است و باید توجه داشته باشید که شاخه‌های بیش از حد عمیق ممکن است در سناریوهای خود میزبانی شده بر عملکرد تاثیر بگذارند. diff --git a/fa/getting-started/install-self-hosted/install-faq.md b/fa/getting-started/install-self-hosted/install-faq.md new file mode 100644 index 000000000..bf8feaa2a --- /dev/null +++ b/fa/getting-started/install-self-hosted/install-faq.md @@ -0,0 +1,183 @@ +# سوالات متداول + +### ۱. چگونه پسورد را ریست کنیم اگر مقداردهی اولیه‌ی استقرار محلی با پسورد اشتباه انجام نشود؟ + +اگر از طریق docker compose مستقر شده است، می توانید برای ریست کردن پسورد، دستور زیر را اجرا کنید: `docker exec -it docker-api-1 flask reset-password` ایمیل حساب کاربری و دو بار پسورد جدید را وارد کنید، و پسورد ریست خواهد شد. + +### ۲. چگونه خطای "فایل یافت نشد" در لاگ هنگام استقرار محلی را حل کنیم؟ + +``` +ERROR:root:Unknown Error in completion +Traceback (most recent call last): + File "/www/wwwroot/dify/dify/api/libs/rsa.py", line 45, in decrypt + private_key = storage.load(filepath) + File "/www/wwwroot/dify/dify/api/extensions/ext_storage.py", line 65, in load + raise FileNotFoundError("File not found") +FileNotFoundError: File not found +``` + +این خطا ممکن است به دلیل تغییر روش استقرار یا حذف فایل `api/storage/privkeys` اتفاق بیفتد. این فایل برای رمزگذاری کلیدهای مدل‌های بزرگ استفاده می‌شود و در صورت از بین رفتن قابل برگشت نیست. می‌توانید با استفاده از دستور زیر کلیدهای رمزگذاری عمومی و خصوصی را بازنشانی کنید: + +* استقرار docker compose + +``` +docker exec -it docker-api-1 flask reset-encrypt-key-pair +``` + +* شروع کد منبع + +وارد دایرکتوری api شوید + +``` +flask reset-encrypt-key-pair +``` + +دستورالعمل‌ها را برای ریست کردن دنبال کنید. + +### ۳. هنگام نصب بعداً قادر به ورود نیستیم و پس از ورود موفقیت‌آمیز، رابط‌های بعدی ۴۰۱ را نشان می‌دهند؟ + +این ممکن است به دلیل تغییر نام دامنه/وب‌سایت باشد و باعث ایجاد cross-domain بین فرانت-اند و سمت سرور می‌شود. cross-domain و identity شامل دو مورد پیکربندی هستند: + +**پیکربندی cross-domain CORS** + +`CONSOLE_CORS_ALLOW_ORIGINS` سیاست cross-domain CORS کنسول، به طور پیش فرض `*` است که به دسترسی از همه نام دامنه‌ها اجازه می‌دهد. `WEB_API_CORS_ALLOW_ORIGINS` استراتژی cross-domain CORS WebAPP، به طور پیش فرض `*` است که به دسترسی از همه نام دامنه‌ها اجازه می‌دهد. + +### ۴. پس از شروع، صفحه به طور مداوم در حال بارگذاری است و بررسی درخواست‌ها خطای CORS را نشان می‌دهد؟ + +این ممکن است به دلیل تغییر نام دامنه/URL باشد و باعث ایجاد cross-domain بین فرانت-اند و سمت سرور شود. لطفا تمام موارد پیکربندی زیر در `docker-compose.yml` را به نام دامنه جدید تغییر دهید: `CONSOLE_API_URL:` URL سمت سرور API کنسول. `CONSOLE_WEB_URL:` URL فرانت-اند وب کنسول. `SERVICE_API_URL:` URL API سرویس. `APP_API_URL:` URL سمت سرور API WebApp. `APP_WEB_URL:` URL WebApp. + +برای اطلاعات بیشتر، لطفا [محیط‌ها](environments.md) را بررسی کنید. + +### ۵. چگونه پس از استقرار نسخه را ارتقا دهیم؟ + +اگر از طریق تصاویر شروع به کار می‌کنید، لطفا جدیدترین تصاویر را برای تکمیل ارتقا بکشید. اگر از طریق کد منبع شروع به کار می‌کنید، لطفا جدیدترین کد را بکشید و سپس برای تکمیل ارتقا شروع به کار کنید. + +هنگام استقرار و به‌روزرسانی کد منبع محلی، باید وارد دایرکتوری API شده و دستور زیر را برای مهاجرت ساختار پایگاه داده به آخرین نسخه اجرا کنید: + +`flask db upgrade` + +### ۶. چگونه متغیرهای محیطی را هنگام استفاده از واردات Notion پیکربندی کنیم؟ + +**سوال: آدرس پیکربندی ادغام Notion چیست؟** + +**جواب: [https://www.notion.so/my-integrations](https://www.notion.so/my-integrations)** + +**سوال: چه متغیرهای محیطی نیاز به پیکربندی دارند؟** + +**جواب: لطفا پیکربندی‌های زیر را هنگام استقرار خصوصی انجام دهید** + +1. **`NOTION_INTEGRATION_TYPE`** : مقدار باید به عنوان (**عمومی/داخلی**) پیکربندی شود. از آنجایی که آدرس بازگردانی OAuth Notion فقط از https پشتیبانی می‌کند، اگر به صورت محلی مستقر شده است، لطفا از ادغام داخلی Notion استفاده کنید. +2. **`NOTION_CLIENT_SECRET`** : رمز مخفی کلاینت OAuth Notion (برای نوع ادغام عمومی استفاده می‌شود) +3. **`NOTION_CLIENT_ID`** : شناسه کلاینت OAuth (برای نوع ادغام عمومی استفاده می‌شود) +4. **`NOTION_INTERNAL_SECRET`** : رمز مخفی ادغام داخلی Notion، اگر مقدار `NOTION_INTEGRATION_TYPE` **داخلی** باشد، باید این متغیر را پیکربندی کنید. + +### ۷. چگونه نام فضای کار در نسخه استقرار محلی را تغییر دهیم؟ + +در جدول `tenants` در پایگاه داده تغییر دهید. + +### ۸. کجا می‌توانیم نام دامنه برای دسترسی به برنامه را تغییر دهیم؟ + +نام دامنه پیکربندی APP\_WEB\_URL را در `docker_compose.yaml` پیدا کنید. + +### ۹. اگر مهاجرت پایگاه داده مورد نیاز باشد، چه مواردی نیاز به پشتیبان‌گیری دارند؟ + +پایگاه داده، ذخیره سازی پیکربندی شده و داده‌های پایگاه داده برداری نیاز به پشتیبان‌گیری دارند. اگر در حالت Docker Compose مستقر شده است، می‌توان تمام محتوای داده در دایرکتوری `dify/docker/volumes` را به طور مستقیم پشتیبان‌گیری کرد. + +### ۱۰. چرا Docker در حال استقرار Dify و راه اندازی OpenLLM به صورت محلی با استفاده از 127.0.0.1 است، اما قادر به دسترسی به پورت محلی نیست؟ + +`127.0.0.1` آدرس داخلی کانتینر است و آدرس سروری که توسط Dify پیکربندی شده است، نیاز به آدرس IP شبکه محلی میزبان دارد. + +### ۱۱. چگونه محدودیت‌های اندازه و تعداد برای آپلود اسناد دانش در نسخه استقرار محلی را حل کنیم؟ + +می‌توانید برای پیکربندی به توضیحات متغیرهای محیطی در مستندات رسمی وب سایت مراجعه کنید: + +[محیط‌ها](environments.md) + +### ۱۲. نسخه استقرار محلی چگونه اعضا را از طریق ایمیل دعوت می‌کند؟ + +نسخه استقرار محلی، اعضا را می‌توان از طریق ایمیل دعوت کرد. پس از وارد کردن دعوت نامه ایمیل، صفحه لینک دعوت را نشان می‌دهد، لینک دعوت را کپی کنید و آن را به کاربران ارسال کنید. اعضای تیم شما می‌توانند با تنظیم رمز عبور از طریق ورود به ایمیل، لینک را باز کرده و وارد فضای کار شما شوند. + +### ۱۳. چگونه خطای listen tcp4 0.0.0.0:80: bind: address already in use را حل کنیم؟ + +این به این دلیل است که پورت اشغال شده است. می‌توانید از دستور `netstat -tunlp | grep 80` برای مشاهده فرآیندی که پورت را اشغال کرده است، استفاده کنید و سپس فرآیند را بکشید. به عنوان مثال، فرآیندهای apache و nginx پورت را اشغال می‌کنند، می‌توانید از دستورات `service apache2 stop` و `service nginx stop` برای متوقف کردن فرآیند استفاده کنید. + +### ۱۴. اگر این خطا در متن به گفتار رخ دهد چه باید کرد؟ + +``` +[openai] Error: ffmpeg is not installed +``` + +از آنجایی که OpenAI TTS تقسیم‌بندی جریان صوتی را اجرا کرده است، FFmpeg برای استفاده عادی هنگام استقرار کد منبع باید نصب شود. در اینجا مراحل دقیق ارائه شده است: + +**ویندوز:** + +1. از [وب‌سایت رسمی FFmpeg](https://ffmpeg.org/download.html) دیدن کنید و کتابخانه اشتراکی ویندوز کامپایل شده از قبل را دانلود کنید. +2. پوشه FFmpeg را دانلود و از حالت فشرده خارج کنید، که پوشه‌ای مشابه "ffmpeg-20200715-51db0a4-win64-static" را ایجاد می‌کند. +3. پوشه از حالت فشرده خارج شده را به یک مکان دلخواه منتقل کنید، مثلا C:\Program Files. +4. مسیر مطلق دایرکتوری bin FFmpeg را به متغیرهای محیطی سیستم اضافه کنید. +5. خط فرمان را باز کنید و "ffmpeg -version" را وارد کنید تا ببینید که آیا اطلاعات نسخه FFmpeg نمایش داده می‌شود یا خیر، که نشان می‌دهد نصب با موفقیت انجام شده است. + +**اوبونتو:** + +1. ترمینال را باز کنید. +2. برای نصب FFmpeg دستورات زیر را وارد کنید: `sudo apt-get update`, سپس `sudo apt-get install ffmpeg` را وارد کنید. +3. "ffmpeg -version" را وارد کنید تا بررسی کنید که آیا با موفقیت نصب شده است یا خیر. + +**CentOS:** + +1. ابتدا باید مخزن EPEL را فعال کنید. در ترمینال، `sudo yum install epel-release` را وارد کنید. +2. سپس `sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm` را وارد کنید. +3. بسته yum را به‌روزرسانی کنید، `sudo yum update` را وارد کنید. +4. در نهایت FFmpeg را نصب کنید، `sudo yum install ffmpeg ffmpeg-devel` را وارد کنید. +5. "ffmpeg -version" را وارد کنید تا بررسی کنید که آیا با موفقیت نصب شده است یا خیر. + +**Mac OS X:** + +1. ترمینال را باز کنید. +2. اگر هنوز Homebrew را نصب نکرده‌اید، می‌توانید با وارد کردن دستور زیر در ترمینال آن را نصب کنید: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` +3. FFmpeg را با Homebrew نصب کنید، `brew install ffmpeg` را وارد کنید. +4. "ffmpeg -version" را وارد کنید تا بررسی کنید که آیا با موفقیت نصب شده است یا خیر. + +### ۱۵. مهاجرت پایگاه داده برداری به Qdrant یا Milvus + +اگر می‌خواهید پایگاه داده برداری را از weaviate به qdrant یا milvus مهاجرت کنید، باید داده‌ها را در پایگاه داده برداری مهاجرت کنید. در اینجا روش مهاجرت آمده است: + +مراحل: + +1. اگر از کد منبع محلی شروع می‌کنید، متغیر محیطی را در فایل `.env` به پایگاه داده برداری که می‌خواهید به آن مهاجرت کنید، تغییر دهید. به عنوان مثال: `VECTOR_STORE=qdrant` +2. اگر از docker-compose شروع می‌کنید، متغیر محیطی را در فایل `docker-compose.yaml` به پایگاه داده برداری که می‌خواهید به آن مهاجرت کنید، تغییر دهید، هم api و هم worker هر دو نیاز دارند. به عنوان مثال: + +``` +# نوع ذخیره سازی برداری که باید استفاده شود. مقادیر پشتیبانی شده عبارتند از `weaviate`, `qdrant`, `milvus`. +VECTOR_STORE: weaviate +``` + +3. دستور زیر را در ترمینال یا کانتینر docker خود اجرا کنید + +``` +flask vdb-migrate # or docker exec -it docker-api-1 flask vdb-migrate +``` + +### ۱۶. چرا SSRF_PROXY لازم است؟ + +شاید متغیر محیطی `SSRF_PROXY` را در فایل `docker-compose.yaml` مشاهده کرده باشید. این امر بسیار مهم است زیرا استقرار محلی Dify از `SSRF_PROXY` برای جلوگیری از حملات SSRF (درخواست سرور از سرور) استفاده می‌کند. برای اطلاعات بیشتر در مورد حملات SSRF، به [این منبع](https://portswigger.net/web-security/ssrf) مراجعه کنید. + +برای کاهش خطرات احتمالی، یک پروکسی برای تمام خدماتی که ممکن است در معرض حملات SSRF باشند، راه‌اندازی کرده‌ایم. این پروکسی تضمین می‌کند که خدماتی مانند Sandbox فقط می‌توانند از طریق آن به شبکه‌های خارجی دسترسی داشته باشند و در نتیجه داده‌ها و خدمات شما را محافظت می‌کند. به طور پیش فرض، این پروکسی هیچ درخواست محلی را رهگیری نمی‌کند. با این حال، می‌توانید با اصلاح فایل پیکربندی `squid` رفتار پروکسی را سفارشی کنید. + +#### نحوه سفارشی کردن رفتار پروکسی؟ + +در فایل `docker/volumes/ssrf_proxy/squid.conf`، تنظیمات پیکربندی پروکسی را خواهید یافت. به عنوان مثال، اگر می‌خواهید به شبکه `192.168.101.0/24` اجازه دهید از طریق پروکسی دسترسی داشته باشد، اما دسترسی به آدرس IP `192.168.101.19` که حاوی داده‌های حساس است را محدود کنید، می‌توانید قوانین زیر را به `squid.conf` اضافه کنید: + +```plaintext +acl restricted_ip dst 192.168.101.19 +acl localnet src 192.168.101.0/24 + +http_access deny restricted_ip +http_access allow localnet +http_access deny all +``` + +این یک مثال اساسی است، و می‌توانید قوانین را برای برآورده کردن نیازهای خاص خود سفارشی کنید. برای اطلاعات بیشتر در مورد پیکربندی `squid`، به [مستندات رسمی](http://www.squid-cache.org/Doc/config/) مراجعه کنید. + + + diff --git a/fa/getting-started/install-self-hosted/local-source-code.md b/fa/getting-started/install-self-hosted/local-source-code.md new file mode 100644 index 000000000..4eb6693cf --- /dev/null +++ b/fa/getting-started/install-self-hosted/local-source-code.md @@ -0,0 +1,248 @@ +# شروع کد منبع محلی + +## پیش نیازها + +> قبل از نصب Dify، مطمئن شوید که دستگاه شما حداقل شرایط سیستم زیر را برآورده می کند: +> - CPU >= 2 هسته +> - RAM >= 4 GiB + +| سیستم عامل | نرم افزار | توضیحات | +| -------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| macOS 10.14 یا بالاتر | Docker Desktop | ماشین مجازی Docker (VM) را طوری تنظیم کنید که حداقل از 2 پردازنده مجازی (vCPU) و 8 گیگابایت حافظه اولیه استفاده کند. در غیر این صورت، نصب ممکن است با شکست مواجه شود. برای اطلاعات بیشتر، لطفاً به [راهنمای نصب Docker Desktop برای Mac](https://docs.docker.com/desktop/mac/install/) مراجعه کنید. | +| پلتفرم های لینوکس |

Docker 19.03 یا بالاتر
Docker Compose 1.25.1 یا بالاتر

| لطفاً برای اطلاعات بیشتر در مورد نحوه نصب Docker و Docker Compose، به ترتیب، به [راهنمای نصب Docker](https://docs.docker.com/engine/install/) و [راهنمای نصب Docker Compose](https://docs.docker.com/compose/install/) مراجعه کنید. | +| ویندوز با WSL 2 فعال |

Docker Desktop

| ما توصیه می کنیم کد منبع و سایر داده هایی که به کانتینرهای لینوکس متصل هستند را در سیستم فایل لینوکس به جای سیستم فایل ویندوز ذخیره کنید. برای اطلاعات بیشتر، لطفاً به [راهنمای نصب Docker Desktop برای استفاده از بک اند WSL 2 در ویندوز](https://docs.docker.com/desktop/windows/install/#wsl-2-backend) مراجعه کنید. | + +> اگر نیاز به استفاده از OpenAI TTS دارید، `FFmpeg` باید برای عملکرد صحیح آن در سیستم نصب شود. برای جزئیات بیشتر، به: [لینک](https://docs.dify.ai/getting-started/install-self-hosted/install-faq#id-14.-what-to-do-if-this-error-occurs-in-text-to-speech) مراجعه کنید. + +### کپی Dify + +```Bash +git clone https://github.com/langgenius/dify.git +``` + +قبل از فعال کردن سرویس های تجاری، ابتدا باید PostgresSQL / Redis / Weaviate (اگر در دسترس نیست) را مستقر کنیم. ما می توانیم آنها را با دستورات زیر شروع کنیم: + +```Bash +cd docker +cp middleware.env.example middleware.env +docker compose -f docker-compose.middleware.yaml up -d +``` + +--- + +### استقرار سرور + +- سرویس رابط API +- سرویس مصرف صف غیر همزمان Worker + +#### نصب محیط پایه: + +شروع سرور به Python 3.10.x نیاز دارد. توصیه می شود از [pyenv](https://github.com/pyenv/pyenv) برای نصب سریع محیط Python استفاده کنید. + +برای نصب نسخه های اضافی Python، از pyenv install استفاده کنید. + +```Bash +pyenv install 3.10 +``` + +برای تغییر به محیط Python "3.10"، از دستور زیر استفاده کنید: + +```Bash +pyenv global 3.10 +``` + +#### این مراحل را دنبال کنید: + +1. به دایرکتوری "api" بروید: + + ``` + cd api + ``` + +2. فایل پیکربندی متغیر محیط را کپی کنید: + + ``` + cp .env.example .env + ``` + +3. یک کلید مخفی تصادفی ایجاد کنید و مقدار SECRET_KEY را در فایل .env جایگزین کنید: + + ``` + awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env + ``` + +4. وابستگی های مورد نیاز را نصب کنید: + + سرویس API Dify از [Poetry](https://python-poetry.org/docs/) برای مدیریت وابستگی ها استفاده می کند. می توانید `poetry shell` را برای فعال کردن محیط اجرا کنید. + + ``` + poetry env use 3.10 + poetry install + ``` + +5. مهاجرت پایگاه داده را انجام دهید: + + مهاجرت پایگاه داده را به آخرین نسخه انجام دهید: + + ``` + poetry shell + 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 را شروع کنید + + برای مصرف وظایف غیر همزمان از صف، مانند وارد کردن فایل مجموعه داده و به روزرسانی سند مجموعه داده، این مراحل را دنبال کنید تا سرویس Worker را در لینوکس یا macOS شروع کنید: + + ``` + celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace + ``` + + اگر از سیستم ویندوز برای شروع سرویس Worker استفاده می کنید، لطفاً به جای آن از دستور زیر استفاده کنید: + + ``` + celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --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. + ``` + +--- + +## استقرار صفحه جلویی + +شروع سرویس صفحه جلویی وب کلاینت + +#### نصب محیط پایه: + +برای شروع سرویس جلویی وب، به [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](https://nodejs.org/en/download) بازدید کنید و بسته نصب را برای سیستم عامل مربوطه خود انتخاب کنید که v18.x یا بالاتر است. توصیه می شود نسخه پایدار را دانلود کنید، که NPM را به طور پیش فرض شامل می شود. + +#### این مراحل را دنبال کنید: + +1. وارد دایرکتوری وب شوید + + ``` + cd web + ``` + +2. وابستگی ها را نصب کنید. + + ``` + npm install + ``` + +3. متغیرهای محیط را پیکربندی کنید. یک فایل با نام .env.local در دایرکتوری فعلی ایجاد کنید و محتوای آن را از .env.example کپی کنید. مقادیر این متغیرهای محیط را مطابق با نیاز خود تغییر دهید: + + ``` + # برای انتشار تولید، این را به PRODUCTION تغییر دهید + NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT + # نسخه استقرار، SELF_HOSTED یا CLOUD + NEXT_PUBLIC_EDITION=SELF_HOSTED + # URL پایه برنامه کنسول، به URL پایه کنسول سرویس WEB اشاره می کند اگر دامنه کنسول + # با دامنه api یا برنامه وب متفاوت باشد. + # مثال: http://cloud.dify.ai/console/api + NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api + # URL برای برنامه WEB، به URL پایه برنامه WEB سرویس WEB اشاره می کند اگر دامنه برنامه وب با + # دامنه کنسول یا api متفاوت باشد. + # مثال: 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. سرویس وب را شروع کنید + + ``` + 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](http://127.0.0.1:3000/) دسترسی پیدا کنید تا از Dify مستقر شده به صورت محلی استفاده کنید. + + diff --git a/fa/getting-started/install-self-hosted/start-the-frontend-docker-container.md b/fa/getting-started/install-self-hosted/start-the-frontend-docker-container.md new file mode 100644 index 000000000..8e54266c1 --- /dev/null +++ b/fa/getting-started/install-self-hosted/start-the-frontend-docker-container.md @@ -0,0 +1,28 @@ +# راه اندازی جداگانه کانتینر Docker برای فرانت اند + +هنگامی که توسعه بک اند را به طور جداگانه انجام می دهید، ممکن است فقط به راه اندازی سرویس بک اند از کد منبع، بدون ساخت و راه اندازی فرانت اند به صورت محلی نیاز داشته باشید. در این حالت، می توانید به طور مستقیم سرویس فرانت اند را با کشیدن تصویر Docker و اجرای کانتینر راه اندازی کنید. در اینجا مراحل خاص آورده شده است: + +#### کشیدن تصویر Docker برای سرویس فرانت اند از 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 +``` + +#### ساخت تصویر Docker از کد منبع + +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. هنگامی که دامنه کنسول و دامنه وب اپ متفاوت هستند، می توانید CONSOLE_URL و APP_URL را به طور جداگانه تنظیم کنید +4. برای دسترسی به آن به صورت محلی، می توانید [http://127.0.0.1:3000](http://127.0.0.1:3000/) را بازدید کنید + + diff --git a/fa/getting-started/readme/features-and-specifications.md b/fa/getting-started/readme/features-and-specifications.md new file mode 100644 index 000000000..0cae3468f --- /dev/null +++ b/fa/getting-started/readme/features-and-specifications.md @@ -0,0 +1,16 @@ +--- +description: >- + این مطلب به کسانی که با LLMها آشنا هستند کمک می‌کند بیشتر با ویژگی‌ها و مزیت‌های Dify آشنا شوند. +--- + +# قابلیت‌ها و ویژگی‌ها + +ما شفافیت را سیاست اصلی خود در مورد مشخصات محصول در نظر گرفته‌ایم تا مطمئن شویم تصمیم‌گیری‌ها با درک کامل انجام می‌شود. این شفافیت نه تنها به انتخاب‌های فنی شما کمک می‌کند، بلکه درک عمیق‌تری را در جامعه برای مشارکت‌های فعال ترویج می‌کند. + +### ویژگی‌های اصلی پروژه + +
EstablishedMarch 2023
Open Source LicenseApache License 2.0 with commercial licensing
Official R&D TeamOver 15 full-time employees
Community ContributorsOver 290 people(As of Q2 2024)
Backend TechnologyPython/Flask/PostgreSQL
Frontend TechnologyNext.js
Codebase SizeOver 130,000 lines
Release FrequencyAverage once per week
+ +### قابلیت‌های فنی + +
LLM Inference EnginesDify Runtime (LangChain removed since v0.4)
Commercial Models Supported10+, including OpenAI and Anthropic
Onboard new mainstream models within 48 hours
MaaS Vendor Supported7, Hugging Face, Replicate, AWS Bedrock, NVIDIA, GroqCloud, together.ai,, OpenRouter
Local Model Inference Runtimes Supported6, Xoribits (recommended), OpenLLM, LocalAI, ChatGLM,Ollama, NVIDIA TIS
OpenAI Interface Standard Model Integration Supported
Multimodal Capabilities

ASR Models

Rich-text models up to GPT-4o specs

Built-in App TypesText generation, Chatbot, Agent, Workflow, Chatflow
Prompt-as-a-Service Orchestration

Visual orchestration interface widely praised, modify Prompts and preview effects in one place.

Orchestration Modes

  • Simple orchestration
  • Assistant orchestration
  • Flow orchestration

Prompt Variable Types

  • String
  • Radio enum
  • External API
  • File (Q3 2024)
Agentic Workflow Features

Industry-leading visual workflow orchestration interface, live-editing node debugging, modular DSL, and native code runtime, designed for building more complex, reliable, and stable LLM applications.


Supported Nodes

  • LLM
  • Knowledge Retrieval
  • Question Classifier
  • IF/ELSE
  • CODE
  • Template
  • HTTP Request
  • Tool
RAG Features

Industry-first visual knowledge base management interface, supporting snippet previews and recall testing.

Indexing Methods

  • Keywords
  • Text vectors
  • LLM-assisted question-snippet model

Retrieval Methods

  • Keywords
  • Text similarity matching
  • Hybrid Search
  • N choose 1(Legacy)
  • Multi-path retrieval

Recall Optimization

  • Rerank models
ETL Capabilities

Automated cleaning for TXT, Markdown, PDF, HTML, DOC, CSV formats. Unstructured service enables maximum support.

Sync Notion docs as knowledge bases.
Sync Webpages as knowledge bases.

Vector Databases SupportedQdrant (recommended), Weaviate,Zilliz/Milvus, Pgvector, Pgvector-rs,Chroma, OpenSearch, TiDB, Tencent Vector, Oracle, Relyt, Analyticdb
Agent Technologies

ReAct, Function Call.

Tooling Support

  • Invoke OpenAI Plugin standard tools
  • Directly load OpenAPI Specification APIs as tools

Built-in Tools

  • 40+ tools(As of Q2 2024)
LoggingSupported, annotations based on logs
Annotation ReplyBased on human-annotated Q&As, used for similarity-based replies. Exportable as data format for model fine-tuning.
Content ModerationOpenAI Moderation or external APIs
Team CollaborationWorkspaces, multi-member management
API SpecsRESTful, most features covered
Deployment MethodsDocker, Helm
diff --git a/fa/getting-started/readme/model-providers.md b/fa/getting-started/readme/model-providers.md new file mode 100644 index 000000000..3aae4046b --- /dev/null +++ b/fa/getting-started/readme/model-providers.md @@ -0,0 +1,385 @@ +# لیست ارائه‌کننده‌های مدل‌ها + +سرویس Dify به صورت پیش‌فرض از مدل‌های هوش‌مصنوعی زیر پشتیبانی می‌کند: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProviderLLMText EmbeddingRerankSpeech to textTTS
OpenAI✔️(🛠️)(👓)✔️✔️✔️
Anthropic✔️(🛠️)
Azure OpenAI✔️(🛠️)(👓)✔️✔️✔️
Gemini✔️
Google Cloud✔️(👓)✔️
Nvidia API Catalog✔️✔️✔️
Nvidia NIM✔️
Nvidia Triton Inference Server✔️
AWS Bedrock✔️✔️
OpenRouter✔️
Cohere✔️✔️✔️
together.ai✔️
Ollama✔️✔️
Mistral AI✔️
groqcloud✔️
Replicate✔️✔️
Hugging Face✔️✔️
Xorbits inference✔️✔️✔️✔️✔️
Zhipu AI✔️(🛠️)(👓)✔️
Baichuan✔️✔️
Spark✔️
Minimax✔️(🛠️)✔️
Tongyi✔️✔️✔️
Wenxin✔️✔️
Moonshot AI✔️(🛠️)
Tencent Cloud✔️
Stepfun✔️(🛠️)(👓)
VolcanoEngine✔️✔️
01.AI✔️
360 Zhinao✔️
Azure AI Studio✔️✔️
deepseek✔️(🛠️)
Tencent Hunyuan✔️
SILICONFLOW✔️✔️
Jina AI✔️✔️
ChatGLM✔️
Xinference✔️(🛠️)(👓)✔️✔️
OpenLLM✔️✔️
LocalAI + ✔️✔️✔️✔️
OpenAI API-Compatible✔️✔️✔️
PerfXCloud✔️✔️
Lepton AI✔️
novita.ai✔️
Amazon Sagemaker✔️✔️✔️
Text Embedding Inference✔️✔️
+ +(🛠️) به معنی داشتن قابلیت «فراخوانی تابع» و (👓) به معنی «پشتیبانی از پردازش تصویر» است. + +--- + +این جدول به صورت پیوسته در حال بروزرسانی است. میتوانید یک لیست از مدل‌های درخواست شده توسط کاربران را از [اینجا](https://github.com/langgenius/dify/discussions/categories/ideas) ببینید و اگر مدل مورد نظرتان را در این لیست نمی‌بینید می‌توانید با ایجاد یک PR آن را درخواست دهید. برای اطلاعات بیشتر راهنمای همکاری در پروژه ([contribution.md](../../community/contribution.md "mention")) را بخوانید. diff --git a/fa/guides/application-orchestrate/README.md b/fa/guides/application-orchestrate/README.md new file mode 100644 index 000000000..2dc18a0ae --- /dev/null +++ b/fa/guides/application-orchestrate/README.md @@ -0,0 +1,26 @@ +# هماهنگ‌سازی برنامه‌ها + +در دیفای، "برنامه" به معنای کاربرد عملی سناریویی است که بر روی مدل‌های زبان بزرگ مانند GPT ساخته شده است. با ایجاد یک برنامه، شما می‌توانید از فناوری هوش مصنوعی هوشمند برای نیازهای خاص خود استفاده کنید. این شامل پارادایم مهندسی برای توسعه برنامه‌های هوش مصنوعی و تحویل‌های خاص می‌شود. + +به طور خلاصه، یک برنامه به توسعه‌دهندگان ارائه می‌دهد: + +* یک API کاربر پسند که می‌تواند مستقیماً توسط برنامه‌های سمت سرور یا سمت کلاینت فراخوانی شود، که از طریق توکن احراز هویت می‌شود +* یک وب‌اپ کاربردی، زیبا و آماده استفاده که می‌توانید آن را با استفاده از الگوی وب‌اپ بیشتر توسعه دهید +* یک رابط کاربری آسان که شامل مهندسی اعلان، مدیریت زمینه، تحلیل لاگ و حاشیه‌نویسی می‌شود + +شما می‌توانید **یکی** یا **همه** این‌ها را برای پشتیبانی از توسعه برنامه هوش مصنوعی خود انتخاب کنید. + +### انواع برنامه‌ها + +دیفای چهار نوع برنامه ارائه می‌دهد: + +* **همراه چت**: یک دستیار مکالمه‌ای که بر روی LLM ساخته شده است +* **تولید متن**: یک دستیار برای وظایف تولید متن مانند نوشتن داستان، طبقه‌بندی متن، ترجمه و غیره +* **عامل**: یک دستیار هوشمند مکالمه‌ای که قادر به تجزیه وظایف، استدلال و فراخوانی ابزار است +* **روند کار**: فرآیندهای LLM انعطاف‌پذیرتر را بر اساس هماهنگی فرآیند تعریف می‌کند + +تفاوت بین تولید متن و همراه چت در جدول زیر نشان داده شده است: + +
تولید متنهمراه چت
رابط وب‌اپفرم + نتایجمکالمه محور
نقطه پایانی APIcompletion-messageschat-messages
حالت تعاملیک سوال، یک جوابمکالمه چند دوره‌ای
نتایج جریانیپشتیبانی می‌شودپشتیبانی می‌شود
حفظ زمینهبه ازای هر جلسهپیوسته
فرم ورودی کاربرپشتیبانی می‌شودپشتیبانی می‌شود
مجموعه داده‌ها و پلاگین‌هاپشتیبانی می‌شودپشتیبانی می‌شود
یادداشت‌های آغازین هوش مصنوعیپشتیبانی نمی‌شودپشتیبانی می‌شود
سناریوهای نمونهترجمه، داوری، نمایه سازیچت کردن
+ +### diff --git a/fa/guides/application-orchestrate/agent.md b/fa/guides/application-orchestrate/agent.md new file mode 100644 index 000000000..5c04c2f9c --- /dev/null +++ b/fa/guides/application-orchestrate/agent.md @@ -0,0 +1,63 @@ +# عامل + +## تعریف + +یک دستیار عامل می‌تواند از توانایی‌های استدلال مدل‌های زبان بزرگ (LLM) استفاده کند. به طور مستقل اهداف را تعیین می‌کند، وظایف پیچیده را ساده می‌کند، ابزارها را به کار می‌گیرد و فرآیندها را برای تکمیل وظایف به طور مستقل اصلاح می‌کند. + +## دستورالعمل‌های استفاده + +برای تسهیل یادگیری و استفاده سریع، الگوهای کاربردی برای دستیار عامل در بخش "اکتشاف" موجود هستند. می‌توانید این الگوها را به محیط کاری خود ادغام کنید. "استودیو" جدید Dify همچنین امکان ایجاد یک دستیار عامل سفارشی برای انطباق با نیازهای فردی را فراهم می‌کند. این دستیار می‌تواند در تجزیه و تحلیل گزارشات مالی، تهیه گزارشات، طراحی لوگو و سازماندهی برنامه‌های سفر کمک کند. + +

اکتشاف- الگوی کاربردی دستیار عامل

+ +توانایی تکمیل وظیفه توسط دستیار عامل به قابلیت‌های استنباط مدل انتخاب شده بستگی دارد. توصیه می‌شود هنگام استفاده از دستیار عامل برای دستیابی به نتایج پایدارتر در تکمیل وظیفه، از یک سری مدل قدرتمندتر مانند GPT-4 استفاده کنید. + +

انتخاب مدل استدلال برای دستیار عامل

+ +می‌توانید prompts را برای دستیار عامل در "دستورالعمل‌ها" بنویسید. برای دستیابی به نتایج مطلوب، می‌توانید اهداف وظیفه، گردش کار، منابع و محدودیت‌های آن را در دستورالعمل‌ها به طور واضح تعریف کنید. + +

ترتیب دادن prompts برای دستیار عامل

+ +## افزودن ابزارها برای دستیار عامل + +در بخش "زمینه"، می‌توانید ابزارهای پایگاه دانش را که دستیار عامل می‌تواند برای بازیابی اطلاعات از آنها استفاده کند، ادغام کنید. این امر در ارائه دانش پس‌زمینه خارجی به آن کمک خواهد کرد. + +در بخش "ابزارها"، می‌توانید ابزارهایی را که برای استفاده مورد نیاز هستند اضافه کنید. این ابزارها می‌توانند قابلیت‌های LLM ها را مانند جستجو در اینترنت، محاسبات علمی یا ایجاد تصویر ارتقا دهند و در نتیجه توانایی LLM برای تعامل با دنیای واقعی را غنی کنند. Dify دو نوع ابزار ارائه می‌دهد: **ابزارهای داخلی و ابزارهای سفارشی.** + +شما می‌توانید به طور مستقیم از ابزارهای داخلی در Dify استفاده کنید یا می‌توانید به راحتی ابزارهای API سفارشی را وارد کنید (در حال حاضر از استانداردهای OpenAPI/Swagger و OpenAI Plugin پشتیبانی می‌کند). + +

افزودن ابزارها برای دستیار

+ +ویژگی **ابزارها** به شما امکان می‌دهد برنامه‌های کاربردی هوش مصنوعی قدرتمندتر را در Dify ایجاد کنید. به عنوان مثال، می‌توانید ابزارهای مناسب را برای دستیار عامل تنظیم کنید و به آن امکان دهید وظایف پیچیده را از طریق استدلال، تجزیه مرحله‌ای و فراخوانی ابزار تکمیل کند. + +علاوه بر این، این ابزار ادغام برنامه شما با سیستم‌ها یا خدمات دیگر را ساده می‌کند و امکان تعامل با محیط خارجی مانند اجرای کد یا دسترسی به منابع اطلاعاتی اختصاصی را فراهم می‌کند. به سادگی نام ابزار مورد نظر برای فراخوانی را در کادر گفتگو بنویسید و به طور خودکار فعال خواهد شد. + +![](../../.gitbook/assets/agent-dalle3.png) + +## تنظیمات عامل + +در Dify، دو حالت استنباط برای دستیار عامل ارائه می‌شود: Function Calling و ReAct. مدل‌هایی مانند GPT-3.5 و GPT-4 که از Function Calling پشتیبانی می‌کنند، عملکرد بهتر و پایدارتری را نشان داده‌اند. برای سری مدل‌هایی که از Function Calling پشتیبانی نمی‌کنند، چارچوب استنباط ReAct را برای دستیابی به اثرات مشابه پیاده‌سازی کرده‌ایم. + +در تنظیمات عامل، می‌توانید حد تکرار عامل را تغییر دهید. + +

حالت Function Calling

+ +

حالت ReAct

+ +## پیکربندی آغازگر مکالمه + +می‌توانید یک آغازگر مکالمه و سؤالات اولیه را برای دستیار عامل خود تنظیم کنید. آغازگر مکالمه پیکربندی شده در ابتدای اولین تعامل هر کاربر نمایش داده خواهد شد و انواع وظایف قابل انجام توسط عامل را به همراه نمونه‌هایی از سؤالات قابل پرسیدن نشان می‌دهد. + +

پیکربندی آغازگر مکالمه و سؤالات اولیه

+ +## اشکال‌زدایی و پیش‌نمایش + +پس از تنظیم دستیار عامل خود، می‌توانید قبل از انتشار آن به عنوان یک برنامه، آن را اشکال‌زدایی و پیش‌نمایش کنید. این امکان به شما می‌دهد تا اثربخشی عامل در تکمیل وظایف را ارزیابی کنید. + +

اشکال‌زدایی و پیش‌نمایش

+ +## انتشار برنامه + +

انتشار برنامه به عنوان یک برنامه وب

+ + diff --git a/fa/guides/application-orchestrate/app-toolkits/README.md b/fa/guides/application-orchestrate/app-toolkits/README.md new file mode 100644 index 000000000..a1e851515 --- /dev/null +++ b/fa/guides/application-orchestrate/app-toolkits/README.md @@ -0,0 +1,37 @@ +# جعبه ابزار برنامه ها + +در **هماهنگی برنامه ها**، روی **اضافه کردن ویژگی** کلیک کنید تا جعبه ابزار برنامه باز شود. + +جعبه ابزار برنامه ویژگی های اضافی مختلفی را برای برنامه های Dify ارائه می دهد: + +
+ +### شروع گفتگو + +در برنامه های گفتگو، هوش مصنوعی به طور فعال اولین جمله را می گوید یا سؤالی می پرسد. می توانید محتوای شروع، از جمله سؤال اولیه را ویرایش کنید. استفاده از شروع گفتگو می تواند کاربران را راهنمایی کند تا سؤالاتی بپرسند، زمینه برنامه را توضیح دهند و مانع شروع گفتگو را کاهش دهند. + +

شروع گفتگو

+ +### پیشنهادات سؤال برای گام بعدی + +تنظیم پیشنهادات سؤال برای گام بعدی به هوش مصنوعی اجازه می دهد تا 3 سؤال پیگیری بر اساس گفتگوی قبلی ایجاد کند، و دور بعدی تعامل را هدایت کند. + +
+ +### استناد و انتساب + +هنگامی که این ویژگی فعال می شود، مدل زبان بزرگ در هنگام پاسخ به سؤالات، محتوای موجود در پایگاه دانش را استناد می کند. می توانید جزئیات استناد خاص را در زیر پاسخ مشاهده کنید، از جمله بخش اصلی متن، شماره بخش و نمره تطبیق. + +برای جزئیات بیشتر، لطفاً به [استناد و انتساب](https://docs.dify.ai/guides/knowledge-base/retrieval-test-and-citation#id-2.-citation-and-attribution) مراجعه کنید. + +### تعدیل محتوا + +در طول تعاملات با برنامه های هوش مصنوعی، اغلب نیازمندیم که الزامات سختگیرانه ای در مورد ایمنی محتوا، تجربه کاربر و مقررات قانونی داشته باشیم. در چنین مواردی، به ویژگی "تعدیل محتوای حساس" نیاز داریم تا محیط تعامل بهتری برای کاربران نهایی ایجاد کنیم. + +### پاسخ های حاشیه نویسی شده + +ویژگی پاسخ های حاشیه نویسی شده امکان سفارشی سازی پاسخ های Q&A با کیفیت بالا را از طریق ویرایش دستی و حاشیه نویسی فراهم می کند. + +به [پاسخ های حاشیه نویسی شده](../../biao-zhu/annotation-reply.md) مراجعه کنید. + + diff --git a/fa/guides/application-orchestrate/app-toolkits/moderation-tool.md b/fa/guides/application-orchestrate/app-toolkits/moderation-tool.md new file mode 100644 index 000000000..693fd47ff --- /dev/null +++ b/fa/guides/application-orchestrate/app-toolkits/moderation-tool.md @@ -0,0 +1,25 @@ +# ابزار تعدیل + +در تعاملات ما با برنامه‌های هوش مصنوعی، اغلب نیاز به الزامات سخت‌گیرانه در مورد امنیت محتوا، تجربه کاربری و مقررات قانونی داریم. در این مرحله، ما به ویژگی "بررسی کلمات حساس" نیاز داریم تا محیط تعاملی بهتری برای کاربران نهایی ایجاد کنیم. در صفحه ارکستراسیون، روی "افزودن ویژگی" کلیک کنید و جعبه ابزار "بررسی محتوا" را در پایین پیدا کنید: + +

بررسی محتوا

+ +## فراخوانی API تعدیل OpenAI + +OpenAI، همراه با اکثر شرکت‌های ارائه دهنده LLM، ویژگی‌های تعدیل محتوا را در مدل‌های خود گنجانده است تا اطمینان حاصل شود که خروجی‌ها شامل محتواهای جنجالی مانند خشونت، محتوای جنسی و فعالیت‌های غیرقانونی نیست. علاوه بر این، OpenAI این قابلیت تعدیل محتوا را در دسترس قرار داده است که می‌توانید به [تعدیل OpenAI](https://platform.openai.com/docs/guides/moderation/overview) مراجعه کنید. + +اکنون شما نیز می‌توانید مستقیماً API تعدیل OpenAI را در Dify فراخوانی کنید؛ می‌توانید به سادگی با وارد کردن "پاسخ از پیش تعیین شده" مربوطه، محتوای ورودی یا خروجی را بررسی کنید. + +

تنظیم تراز بار از افزودن مدل

+ +## کلمات کلیدی + +توسعه‌دهندگان می‌توانند کلمات حساس مورد نیاز خود را برای بررسی سفارشی کنند، مانند استفاده از "کشتن" به عنوان کلمه کلیدی برای انجام یک عمل حسابرسی زمانی که کاربران ورودی دارند. محتوای پاسخ از پیش تعیین شده باید "محتوا در حال نقض خط مشی‌های استفاده است" باشد. می‌توان پیش‌بینی کرد که هنگامی که کاربر یک بخش متن حاوی "کشتن" را در ترمینال وارد می‌کند، ابزار بررسی کلمات حساس را فعال می‌کند و محتوای پاسخ از پیش تعیین شده را برمی‌گرداند. + +

تنظیم تراز بار از افزودن مدل

+ +## افزونه تعدیل + +شرکت‌های مختلف اغلب مکانیسم‌های خاص خود را برای تعدیل کلمات حساس دارند. هنگام توسعه برنامه‌های هوش مصنوعی خود، مانند یک ChatBot پایگاه دانش داخلی، شرکت‌ها نیاز دارند که محتوای درخواست ورودی از سوی کارمندان را برای کلمات حساس تعدیل کنند. برای این منظور، توسعه‌دهندگان می‌توانند یک افزونه API بر اساس مکانیسم‌های تعدیل کلمات حساس داخلی شرکت خود بنویسند که سپس می‌توان آن را در Dify فراخوانی کرد تا به درجه بالایی از سفارشی‌سازی و حفاظت از حریم خصوصی برای بررسی کلمات حساس دست یابد. + +

افزونه تعدیل

diff --git a/fa/guides/application-orchestrate/conversation-application.md b/fa/guides/application-orchestrate/conversation-application.md new file mode 100644 index 000000000..14447d79c --- /dev/null +++ b/fa/guides/application-orchestrate/conversation-application.md @@ -0,0 +1,81 @@ +# دستیار مکالمه + +برنامه های مکالمه برای برقراری گفتگوی مداوم با کاربر از حالت یک سوال-یک جواب استفاده می کنند. + +### سناریوهای قابل اجرا + +برنامه های مکالمه را می توان در زمینه هایی مانند خدمات مشتری، آموزش آنلاین، مراقبت های بهداشتی، خدمات مالی و غیره استفاده کرد. این برنامه ها می توانند به سازمان ها در بهبود کارایی، کاهش هزینه های نیروی کار و ارائه تجربه کاربری بهتر کمک کنند. + +### نحوه نوشتن + +برنامه های مکالمه از موارد زیر پشتیبانی می کنند: اعلان، متغیرها، زمینه، سخنان آغازین و پیشنهاداتی برای سوال بعدی. + +در اینجا، ما از یک برنامه مصاحبه کننده به عنوان مثال برای معرفی نحوه نوشتن برنامه های مکالمه استفاده می کنیم. + +#### مرحله 1 ایجاد یک برنامه + +برای ایجاد یک برنامه، روی دکمه "ایجاد برنامه" در صفحه اصلی کلیک کنید. نام برنامه را وارد کنید و **"برنامه چت"** را به عنوان نوع برنامه انتخاب کنید. + +

ایجاد برنامه

+ +#### مرحله 2: نوشتن برنامه + +پس از ایجاد برنامه با موفقیت، به طور خودکار به صفحه مرور برنامه هدایت می شوید. روی دکمه در منوی سمت چپ کلیک کنید: **"ارکستره کردن"** برای نوشتن برنامه. + +
+ +**2.1 وارد کردن اعلان ها** + + عبارات اعلان برای هدایت هوش مصنوعی در ارائه پاسخ های حرفه ای و دقیق تر استفاده می شوند. شما می توانید از ژنراتور اعلان داخلی برای ساخت اعلان های مناسب استفاده کنید. اعلان ها از وارد کردن متغیرهای فرم مانند `{{input}}` پشتیبانی می کنند. مقادیر موجود در متغیرهای اعلان با مقادیر وارد شده توسط کاربر جایگزین می شود. + +مثال: + +1. دستور سناریو مصاحبه را وارد کنید. +2. اعلان به طور خودکار در جعبه محتوا سمت راست تولید می شود. +3. شما می توانید متغیرهای سفارشی را در اعلان وارد کنید تا آن را به نیازها یا جزئیات خاص تنظیم کنید. + +برای تجربه بهتر، یک گفتگوی آغازین اضافه می کنیم: `"سلام، {{name}}. من مصاحبه کننده شما، باب هستم. آماده ای؟"` + +برای اضافه کردن گفتگوی آغازین، روی دکمه "افزودن ویژگی" در گوشه بالا سمت چپ کلیک کنید و ویژگی "سخنان آغازین مکالمه" را فعال کنید: + +
+ +سپس سخنان آغازین را ویرایش کنید: + +![](../../.gitbook/assets/conversation-options.png) + +**2.2 اضافه کردن زمینه** + +اگر یک برنامه بخواهد محتوایی را بر اساس مکالمات متنی خصوصی تولید کند، می تواند از ویژگی [دانش](../knowledge-base/) ما استفاده کند. برای اضافه کردن پایگاه دانش، روی دکمه "افزودن" در زمینه کلیک کنید. + +![](../../../img/context.png) + +**2.3 اشکال زدایی** + +ورودی کاربر را در سمت راست وارد کنید و محتوای پاسخ را بررسی کنید. + +![](../../.gitbook/assets/debug.png) + +اگر نتایج رضایت بخش نیست، می توانید اعلان ها و پارامترهای مدل را تنظیم کنید. برای تنظیم پارامترهای مدل، روی نام مدل در گوشه بالا سمت راست کلیک کنید: + +![](../../.gitbook/assets/adjust-model-parameters.png) + +**اشکال زدایی با چندین مدل:** + +اگر اشکال زدایی با یک مدل به تنهایی ناکارآمد به نظر می رسد، می توانید از ویژگی **اشکال زدایی به عنوان چندین مدل** برای آزمایش دسته ای اثربخشی پاسخ مدل ها استفاده کنید. + +![](../../.gitbook/assets/multiple-models.png) + +از افزودن حداکثر 4 LLM در یک زمان پشتیبانی می کند. + +![](../../.gitbook/assets/multiple-models-2.png) + +> ⚠️ هنگام استفاده از ویژگی اشکال زدایی چند مدل، اگر فقط برخی از مدل های بزرگ قابل مشاهده هستند، به این دلیل است که کلیدهای دیگر مدل های بزرگ هنوز اضافه نشده اند. شما می توانید به صورت دستی کلیدهای چندین مدل را در [“اضافه کردن ارائه دهنده جدید”](https://docs.dify.ai/guides/model-configuration/new-provider) اضافه کنید. + +**2.4 منتشر کردن برنامه** + +پس از اشکال زدایی برنامه، برای ایجاد یک برنامه هوش مصنوعی مستقل، روی دکمه **"انتشار"** در گوشه بالا سمت راست کلیک کنید. علاوه بر تجربه برنامه از طریق یک URL عمومی، می توانید توسعه ثانویه را بر اساس API ها انجام دهید، آن را در وب سایت ها جاسازی کنید و موارد دیگر. برای جزئیات، لطفا به [انتشار](https://docs.dify.ai/guides/application-publishing) مراجعه کنید. + +اگر می خواهید برنامه ای که به اشتراک می گذارید را سفارشی کنید، می توانید [قالب وب اپ](https://github.com/langgenius/webapp-conversation) منبع باز ما را Fork کنید. بر اساس این قالب، می توانید برنامه را مطابق نیازها و الزامات سبک خاص خود تغییر دهید. + + diff --git a/fa/guides/application-orchestrate/creating-an-application.md b/fa/guides/application-orchestrate/creating-an-application.md new file mode 100644 index 000000000..d4efd1aba --- /dev/null +++ b/fa/guides/application-orchestrate/creating-an-application.md @@ -0,0 +1,52 @@ +# ایجاد اپلیکیشن + +شما می توانید به سه روش در استودیوی Dify اپلیکیشن بسازید: + +* ایجاد اپلیکیشن بر اساس یک الگوی آماده (برای مبتدیان توصیه می‌شود) +* ایجاد اپلیکیشن خالی +* ایجاد اپلیکیشن از طریق فایل DSL (محلی/آنلاین) + +### ایجاد اپلیکیشن از یک الگو + +هنگام اولین استفاده از Dify، ممکن است با ایجاد اپلیکیشن آشنایی نداشته باشید. برای کمک به کاربران جدید در سریع‌تر درک انواع اپلیکیشن‌هایی که در Dify قابل ساخت هستند، مهندسین Prompt تیم Dify، الگوهای اپلیکیشن با کیفیت بالا برای سناریوهای مختلف ایجاد کرده‌اند. + +می‌توانید از منوی ناوبری "Studio" را انتخاب کرده، سپس در لیست اپلیکیشن‌ها "Create from Template" را انتخاب کنید. + +

ایجاد اپلیکیشن از یک الگو

+ +هر الگویی را انتخاب کنید و روی **Use this template** کلیک کنید. + +

الگوهای اپلیکیشن Dify

+ +### ایجاد یک اپلیکیشن جدید + +اگر نیاز دارید یک اپلیکیشن خالی در Dify ایجاد کنید، می‌توانید "Studio" را از منوی ناوبری انتخاب کرده، سپس در لیست اپلیکیشن‌ها "Create from Blank" را انتخاب کنید. + +هنگام اولین بار ایجاد اپلیکیشن، ممکن است نیاز باشد ابتدا [مفاهیم پایه](./#application\_type) از چهار نوع اپلیکیشن مختلف در Dify را درک کنید: چت بات، ژنراتور متن، عامل و گردش کار. + +

ایجاد اپلیکیشن خالی

+ +هنگام انتخاب نوع اپلیکیشن خاص، می‌توانید آن را با ارائه نام، انتخاب یک آیکون مناسب (یا بارگذاری تصویر مورد علاقه خود به عنوان آیکون) و نوشتن یک شرح واضح و مختصر از هدف آن، سفارشی سازی کنید. این جزئیات به اعضای تیم کمک می‌کند تا در آینده به راحتی اپلیکیشن را درک و استفاده کنند. + +### ایجاد از یک فایل DSL + +{% hint style="info" %} +Dify DSL یک استاندارد فایل مهندسی اپلیکیشن هوش مصنوعی تعریف شده توسط Dify.AI است. فرمت فایل YML است. این استاندارد شامل شرح اولیه اپلیکیشن، پارامترهای مدل، پیکربندی هماهنگ سازی و اطلاعات دیگر است. +{% endhint %} + +#### وارد کردن فایل DSL محلی + +اگر یک الگو (فایل DSL) از جامعه یا افراد دیگر دریافت کرده‌اید، می‌توانید "Import DSL File" را از استودیو انتخاب کنید. پس از وارد کردن، همه اطلاعات پیکربندی اپلیکیشن اصلی مستقیماً بارگیری خواهد شد. + +

ایجاد اپلیکیشن با وارد کردن یک فایل DSL

+ +#### وارد کردن فایل DSL از URL + +همچنین می‌توانید فایل‌های DSL را از طریق URL وارد کنید، با استفاده از فرمت لینک زیر: + +```URL +https://example.com/your_dsl.yml +``` + +

ایجاد اپلیکیشن با وارد کردن یک فایل DSL

+ diff --git a/fa/guides/application-orchestrate/llms-use-faq.md b/fa/guides/application-orchestrate/llms-use-faq.md new file mode 100644 index 000000000..8cc1cc93e --- /dev/null +++ b/fa/guides/application-orchestrate/llms-use-faq.md @@ -0,0 +1,141 @@ +# سوالات متداول + +### 1. چگونه یک مدل پایه را انتخاب کنیم؟ + +**gpt-3.5-turbo** •gpt-3.5-turbo یک نسخه ارتقا یافته از سری مدل‌های gpt-3 است. این مدل قدرتمندتر از gpt-3 است و می‌تواند وظایف پیچیده‌تری را انجام دهد. این مدل پیشرفت‌های قابل توجهی در درک متن طولانی و استدلال بین اسناد داشته است. gpt-3.5 turbo می‌تواند متن منسجم‌تر و متقاعد کننده‌تر تولید کند. همچنین پیشرفت‌های بزرگی در خلاصه سازی، ترجمه و نوشتن خلاقانه دارد. **خوب در: درک متن طولانی، استدلال بین اسناد، خلاصه سازی، ترجمه، نوشتن خلاقانه** + +**gpt-4** •gpt-4 جدیدترین و قدرتمندترین مدل زبان Transformer است. این مدل تقریباً 200 میلیارد پارامتر از پیش آموزش دیده دارد، که آن را در همه وظایف زبانی به ویژه وظایفی که نیاز به درک عمیق و تولید پاسخ‌های طولانی و پیچیده دارند، به اوج می‌رساند. Gpt-4 می‌تواند همه جنبه‌های زبان انسان را شامل درک مفاهیم انتزاعی و استدلال بین صفحات را اداره کند. Gpt-4 اولین سیستم واقعی درک زبان عمومی است که می‌تواند هر وظیفه‌ای در زمینه پردازش زبان طبیعی در زمینه هوش مصنوعی را اداره کند. **خوب در: \*همه وظایف پردازش زبان طبیعی، درک زبان، تولید متن طولانی، استدلال بین اسناد، درک مفاهیم انتزاعی\***لطفا به: [https://platform.openai.com/docs/models/overview](https://platform.openai.com/docs/models/overview) مراجعه کنید + +### 2. چرا توصیه می‌شود max\_tokens را کوچکتر تنظیم کنیم؟ + +زیرا در پردازش زبان طبیعی، خروجی‌های متن طولانی‌تر معمولاً به زمان محاسباتی بیشتر و منابع محاسباتی بیشتری نیاز دارند. بنابراین، محدود کردن طول متن خروجی می‌تواند تا حدی هزینه محاسباتی و زمان را کاهش دهد. به عنوان مثال، تنظیم: max\_tokens=500، به این معنی است که فقط 500 توکن اول متن خروجی در نظر گرفته می‌شود، و بخش‌هایی که از این طول تجاوز می‌کنند، حذف می‌شوند. هدف از انجام این کار این است که اطمینان حاصل شود که طول متن خروجی از محدوده قابل قبول LLM تجاوز نمی‌کند، در حالی که از منابع محاسباتی به طور کامل استفاده می‌شود تا راندمان مدل بهبود یابد. از طرف دیگر، اغلب محدود کردن max\_tokens می‌تواند طول دستورالعمل را افزایش دهد، مانند محدودیت gpt-3.5-turbo که 4097 توکن است، اگر max\_tokens=4000 را تنظیم کنید، فقط 97 توکن برای دستورالعمل باقی می‌ماند، و اگر از این مقدار تجاوز کند، خطایی گزارش می‌شود. + +### 3. چگونه می‌توان داده‌های متن طولانی را در دانش به طور معقولی تقسیم کرد؟ + +در برخی از برنامه‌های پردازش زبان طبیعی، متن اغلب به پاراگراف‌ها یا جملات تقسیم می‌شود تا پردازش و درک بهتر اطلاعات معنایی و ساختاری در متن انجام شود. واحد حداقل تقسیم به وظیفه خاص و پیاده سازی فنی بستگی دارد. به عنوان مثال: + +• برای وظایف طبقه بندی متن، متن معمولاً به جملات یا پاراگراف‌ها تقسیم می‌شود. + +• برای وظایف ترجمه ماشینی، باید از جملات یا پاراگراف‌های کامل به عنوان واحدهای تقسیم استفاده کرد. + +در نهایت، هنوز به آزمایش و ارزیابی برای تعیین مناسب‌ترین فناوری توگذاری و واحد تقسیم نیاز است. می‌توان عملکرد فناوری‌ها و واحدهای تقسیم مختلف را در مجموعه آزمون مقایسه کرد تا طرح بهینه را انتخاب کرد. + +### 4. چه تابع فاصله‌ای هنگام دریافت بخش‌بندی دانش استفاده می‌کنیم؟ + +از [شباهت کسینوسی](https://en.wikipedia.org/wiki/Cosine_similarity) استفاده می‌کنیم. انتخاب تابع فاصله معمولاً بی‌اهمیت است. توگذاری‌های OpenAI به طول 1 نرمال می‌شوند، که به این معنی است: + +•استفاده از حاصلضرب نقطه‌ای برای محاسبه شباهت کسینوسی می‌تواند کمی سریع‌تر باشد + +•شباهت کسینوسی و فاصله اقلیدسی به همان رتبه‌بندی منجر خواهند شد + +پس از نرمال شدن بردارهای توگذاری به طول 1، محاسبه شباهت کسینوسی بین دو بردار می‌تواند به حاصلضرب نقطه‌ای آن‌ها ساده شود. از آنجا که بردارهای نرمال شده طول 1 دارند، نتیجه حاصلضرب نقطه‌ای برابر با نتیجه شباهت کسینوسی است. + +از آنجا که محاسبه حاصلضرب نقطه‌ای سریع‌تر از سایر معیارهای شباهت (مانند فاصله اقلیدسی) است، استفاده از بردارهای نرمال شده برای محاسبه حاصلضرب نقطه‌ای می‌تواند تا حدی راندمان محاسباتی را بهبود بخشد. + +### 5. **هنگام پر کردن کلید OpenAI، خطای "اعتبارسنجی ناموفق: شما از سهمیه فعلی خود تجاوز کرده‌اید، لطفاً برنامه و جزئیات صورت حساب خود را بررسی کنید" رخ می‌دهد. علت این خطا چیست؟** + +این خطا نشان می‌دهد که موجودی حساب کلید OpenAI تمام شده است. لطفاً حساب OpenAI خود را در openai.com شارژ کنید. برای اطلاعات بیشتر در مورد برنامه‌ها و صورت حساب آن‌ها، به [OpenAI](https://openai.com/pricing) مراجعه کنید. + +### 6. هنگام استفاده از کلید OpenAI برای گفتگو در برنامه، یک پیام خطا به شرح زیر وجود دارد. **علت چیست؟** + +خطای 1: + +```JSON +سرور با خطای داخلی مواجه شد و نتوانست درخواست شما را کامل کند。سرور یا پرکار است یا خطایی در برنامه وجود دارد +``` + +خطای 1: + +```JSON +محدودیت نرخ برای default-gpt-3.5-turboin سازمان org-wDrZCxxxxxxxxxissoZb در requestsper min. محدودیت: 3 / min. لطفا در 20 ثانیه دیگر دوباره امتحان کنید. اگر همچنان با مشکل مواجه هستید، از طریق مرکز راهنمایی در help.openai.com با ما تماس بگیرید. لطفاً یک روش پرداخت به حساب خود اضافه کنید تا محدودیت نرخ خود را افزایش دهید. از https://platform.openai.com/account/billing برای اضافه کردن روش پرداخت دیدن کنید. +``` + +لطفاً بررسی کنید که آیا محدودیت نرخ تماس با رابط رسمی به دست آمده است یا خیر. برای اطلاعات بیشتر، به [مستندات رسمی](https://platform.openai.com/docs/guides/rate-limits) مراجعه کنید. + +### 6. پس از استقرار محلی، Explore-Chat خطای "آرگومان درخواست ناشناخته ارائه شده: functions" را برمی‌گرداند. چگونه می‌توان این مشکل را حل کرد؟ + +ابتدا لطفاً بررسی کنید که نسخه‌های فرانت‌اند و بک‌اند به روز و با یکدیگر سازگار هستند. این خطا همچنین می‌تواند در صورتی رخ دهد که از کلید Azure OpenAI بدون استقرار موفقیت‌آمیز مدل استفاده شود. تأیید کنید که منبع Azure OpenAI یک مدل مستقر دارد - نسخه مدل gpt-3.5-turbo باید 0613 یا جدیدتر باشد، زیرا نسخه‌های قبلی از قابلیت‌های تماس با تابع مورد نیاز Explore-Chat پشتیبانی نمی‌کنند. + +### 7. هنگام تعویض مدل در برنامه، خطای زیر مشاهده می‌شود: + +```JSON +Anthropic: کد خطا: 400 - f'error': f'type': "خطای درخواست نامعتبر, 'message': 'temperature: range: -1 or 0..1) +``` + +این خطا به این دلیل رخ می‌دهد که هر مدل دارای محدوده‌های معتبر مختلفی برای پارامترهای خود است. مطمئن شوید که مقدار پارامتر را با توجه به محدوده مجاز برای مدل فعلی پیکربندی کرده‌اید. + +### 8. چگونه می‌توان پیام خطای زیر را حل کرد؟ + +```JSON +پرس و جو یا دستورالعمل پیشوند خیلی طولانی است، می‌توانید دستورالعمل پیشوند را کاهش دهید، یا max token را کوچک کنید، یا به یک LLM با اندازه محدودیت توکن بزرگتر تغییر دهید +``` + +می‌توانید مقدار "Max token" را در تنظیمات پارامتر Prompt Eng پایین بیاورید. + +### 9. مدل‌های پیش‌فرض در Dify کدامند، و آیا می‌توان از LLMهای منبع باز استفاده کرد؟ + +A: مدل‌های پیش‌فرض را می‌توان در **تنظیمات - ارائه دهنده مدل** پیکربندی کرد. LLMهای تولید متن که در حال حاضر پشتیبانی می‌شوند شامل OpenAI، Azure OpenAl، Anthropic و غیره هستند. در عین حال، می‌توان LLMهای منبع باز میزبانی شده در Hugging Face، Replicate، xinference و غیره را نیز ادغام کرد. + +### 10. دانش در نسخه Community Edition هنگامی که حالت بخش‌بندی Q\&A فعال است، در "در صف انتظار" گیر می‌کند. + +لطفاً بررسی کنید که آیا محدودیت نرخ برای کلید API مدل توگذاری استفاده شده به دست آمده است یا خیر. + +### 11. خطای "توکن نامعتبر" هنگام استفاده از برنامه ظاهر می‌شود. + +اگر خطای "توکن نامعتبر" ظاهر شد، دو راه حل احتمالی وجود دارد: + +* حافظه نهان مرورگر (کوکی‌ها، ذخیره‌سازی جلسه و ذخیره‌سازی محلی) یا حافظه نهان برنامه در موبایل را پاک کنید. سپس، دوباره به برنامه مراجعه کنید. +* URL برنامه را مجدداً تولید کنید و دوباره با URL جدید به برنامه دسترسی پیدا کنید. این مشکل "توکن نامعتبر" را برطرف می‌کند. + +### 12. محدودیت اندازه برای آپلود اسناد دانش چیست؟ + +حداکثر اندازه برای آپلود یک سند منفرد در حال حاضر 15 مگابایت است. همچنین محدودیت 100 سند در کل وجود دارد. اگر از استقرار محلی استفاده می‌کنید، این محدودیت‌ها را می‌توان تنظیم کرد. برای جزئیات در مورد تغییر محدودیت‌ها، به [مستندات](../../getting-started/install-self-hosted/install-faq.md#11.-how-to-solve-the-size-and-quantity-limitations-for-uploading-dataset-documents-in-the-local-depl) مراجعه کنید. + +### 13. چرا Claude هنوز هم هنگام استفاده از مدل Claude اعتبار OpenAI مصرف می‌کند؟ + +مدل Claude مدل توگذاری خاص خود را ندارد. بنابراین، فرآیند توگذاری و سایر تولیدات گفتگو مانند پیشنهادات سوال بعدی به طور پیش‌فرض از کلیدهای OpenAI استفاده می‌کنند. این به این معنی است که اعتبار OpenAI هنوز هم مصرف می‌شود. می‌توانید مدل‌های استنباط و توگذاری پیش‌فرض مختلفی را در **تنظیمات > ارائه دهنده مدل** تنظیم کنید. + +### 14. آیا راهی برای کنترل استفاده بیشتر از داده‌های دانش به جای قابلیت‌های تولید خود مدل وجود دارد؟ + +اینکه آیا از پایگاه دانش استفاده شود یا خیر به توصیف دانش بستگی دارد. لطفاً توصیف دانش را تا حد امکان به وضوح بنویسید. برای اطلاعات بیشتر، به [مستندات](https://docs.dify.ai/advanced/datasets) مراجعه کنید. + +### 15. چگونه می‌توان سند دانش آپلود شده در اکسل را بهتر بخش‌بندی کرد؟ + +سربرگ را در ردیف اول تنظیم کنید و محتوا را در هر ردیف بعدی نمایش دهید. هیچ تنظیم سربرگ اضافی یا محتوای جدول فرمت شده پیچیده نداشته باشید. + +### 16. من قبلاً ChatGPT Plus را خریداری کرده‌ام، چرا هنوز نمی‌توانم از GPT4 در Dify استفاده کنم؟ + +ChatGPT Plus و API مدل GPT-4 OpenAI دو محصول جداگانه با قیمت‌گذاری جداگانه هستند. API مدل‌ها دارای ساختار قیمت‌گذاری خاص خود هستند، برای جزئیات به [مستندات قیمت‌گذاری OpenAI](https://openai.com/pricing) مراجعه کنید. برای دسترسی به API مدل GPT-4، باید برای یک دوره صورت حساب پرداخت کنید - فقط داشتن یک روش پرداخت در پرونده و دسترسی به GPT-3.5 از طریق ChatGPT Plus کافی نیست. برای جزئیات کامل در مورد به دست آوردن دسترسی به GPT-4، به [مستندات رسمی OpenAI](https://platform.openai.com/account/billing/overview) مراجعه کنید. + +### 17. چگونه می‌توان مدل‌های توگذاری دیگر را اضافه کرد؟ + +Dify از استفاده از ارائه دهندگان ذکر شده به عنوان ارائه دهنده مدل توگذاری پشتیبانی می‌کند، فقط نوع `توگذاری` را در کادر پیکربندی انتخاب کنید. + +* Azure +* LocalAI +* MiniMax +* OpenAI +* Replicate +* XInference + +### 18. چگونه می‌توان برنامه‌ای را که خودم ایجاد کرده‌ام به عنوان یک الگوی برنامه تنظیم کرد؟ + +توانایی تنظیم برنامه‌ای را که خودم ایجاد کرده‌ام به عنوان یک الگو در حال حاضر پشتیبانی نمی‌شود. الگوهای موجود توسط Dify به طور رسمی برای مرجع کاربران نسخه ابری ارائه می‌شود. اگر از نسخه ابری استفاده می‌کنید، می‌توانید برنامه‌هایی را به فضای کاری خود اضافه کنید یا آن‌ها را سفارشی کنید تا پس از اصلاحات برنامه خود را بسازید. اگر از نسخه community استفاده می‌کنید و به ایجاد الگوهای برنامه بیشتر برای تیم خود نیاز دارید، می‌توانید برای دریافت پشتیبانی فنی پولی با تیم تجاری ما مشورت کنید: [business@dify.ai](mailto:business@dify.ai) + + +### 19. 502 Bad Gateway + +این مشکل به دلیل هدایت Nginx سرویس به موقعیت اشتباه اتفاق می‌افتد. ابتدا مطمئن شوید که کانتینر در حال اجرا است، سپس دستور زیر را با امتیازات ریشه اجرا کنید: +``` +docker ps -q | xargs -n 1 docker inspect --format '{{ .Name }}: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' +``` +این دو خط را در خروجی پیدا کنید: +``` +/docker-web-1: 172.19.0.5 +/docker-api-1: 172.19.0.7 +``` +آدرس‌های IP در انتها را به خاطر بسپارید. سپس، مکانی را که کد منبع dify را در آن ذخیره کرده‌اید، باز کنید، dify/docker/nginx/conf.d را باز کنید، http://api:5001 را با http://172.19.0.7:5001 جایگزین کنید و http://web:3000 را با http://172.19.0.5:3000 جایگزین کنید. پس از آن، کانتینر Nginx را مجدداً راه‌اندازی کنید یا پیکربندی را دوباره بارگذاری کنید. +این آدرس‌های IP ***مثال*** هستند، شما باید دستور را اجرا کنید تا آدرس IP خود را دریافت کنید، آن را مستقیماً پر نکنید. +ممکن است هنگام راه‌اندازی مجدد کانتینرهای مرتبط، نیاز به پیکربندی مجدد بر اساس IP داشته باشید. + + diff --git a/fa/guides/application-orchestrate/overview.md b/fa/guides/application-orchestrate/overview.md new file mode 100644 index 000000000..7239004d5 --- /dev/null +++ b/fa/guides/application-orchestrate/overview.md @@ -0,0 +1,28 @@ +# مرور کلی + +برنامه‌های وب برای مصرف‌کنندگان برنامه‌ها هستند. زمانی که یک توسعه‌دهنده برنامه، برنامه‌ای را در دایفی ایجاد می‌کند، یک برنامه وب متناظر دریافت خواهد کرد. کاربران برنامه وب می‌توانند از آن بدون ورود به سیستم استفاده کنند. برنامه وب به اندازه‌های مختلف دستگاه‌ها سازگار شده است: کامپیوتر شخصی، تبلت و موبایل. + +محتوای برنامه وب با پیکربندی منتشر شده توسط برنامه سازگار است. زمانی که پیکربندی برنامه اصلاح شود و دکمه "انتشار" در صفحه طرح کلمات محرک برنامه برای انتشار کلیک شود، محتوای برنامه وب نیز مطابق با پیکربندی برنامه فعلی به روز خواهد شد. + +ما می‌توانیم دسترسی به برنامه وب را در صفحه مرور کلی برنامه فعال و غیرفعال کنیم و اطلاعات سایت برنامه وب را تغییر دهیم: + +* آیکون +* نام +* توضیحات برنامه +* زبان رابط +* اطلاعات حق نسخه‌برداری +* پیوند سیاست حفظ حریم خصوصی + +عملکرد عملکردی برنامه وب به این بستگی دارد که آیا توسعه‌دهنده این عملکرد را در هنگام کامپایل برنامه فعال می‌کند یا خیر، به عنوان مثال: + +* یادداشت‌های مکالمه +* متغیرهایی که قبل از مکالمه پر می‌شوند +* پیگیری +* گفتار به متن +* پاسخ‌های مشابه بیشتر (برنامه‌های تولید متن) +* ... + +در فصل‌های بعدی، دو نوع برنامه وب را به طور جداگانه معرفی خواهیم کرد: + +* تولید کننده متن +* مکالمه‌ای diff --git a/fa/guides/application-orchestrate/prompt-engineering/README.md b/fa/guides/application-orchestrate/prompt-engineering/README.md new file mode 100644 index 000000000..f5e638d9f --- /dev/null +++ b/fa/guides/application-orchestrate/prompt-engineering/README.md @@ -0,0 +1,36 @@ +--- +description: >- + تسلط بر استفاده از Dify برای هماهنگ سازی برنامه ها و تمرین مهندسی Prompt و ساخت برنامه های کاربردی AI با ارزش بالا با دو نوع برنامه built-in. +--- + +# مهندسی Prompt + +مفهوم اصلی Dify، تعریف اعلامی از برنامه‌های AI است. همه چیز، از جمله Prompts، زمینه، افزونه ها و غیره را می‌توان در یک فایل YAML توصیف کرد (به همین دلیل به آن Dify گفته می‌شود). در نهایت یک API واحد یا یک WebApp آماده به کار ارائه می‌دهد. + +در عین حال، Dify یک رابط هماهنگی Prompt را ارائه می‌دهد که توسعه‌دهندگان می‌توانند به طور بصری ویژگی‌های مختلف برنامه را بر اساس Prompts هماهنگ کنند. به نظر شما ساده نیست؟ + +برای برنامه‌های AI ساده و پیچیده، Prompts خوب می‌تواند به طور موثری کیفیت خروجی مدل را بهبود بخشد، نرخ خطا را کاهش دهد و نیازهای سناریوهای خاص را برآورده کند. Dify در حال حاضر دو فرم رایج برنامه را ارائه می‌دهد: گفتگو و مولد متن. این بخش شما را از طریق هماهنگی بصری برنامه‌های AI راهنمایی می‌کند. + +### مراحل هماهنگی برنامه + +1. تعیین سناریوهای برنامه و الزامات عملکردی +2. طراحی و آزمایش Prompts و پارامترهای مدل +3. هماهنگی Prompts +4. انتشار برنامه +5. مشاهده و تکرار مداوم + +### تمرین عملی + +TODO + +### تفاوت‌های بین انواع برنامه‌ها + +برنامه‌های تولید متن و گفتگو در Dify، در هماهنگی prompt تفاوت‌های جزئی دارند. برنامه‌های گفتگو برای برآورده کردن سناریوهای پیچیده کاربر و نیازهای مدیریت زمینه، نیازمند گنجاندن "چرخه عمر گفتگو" هستند. + +مهندسی Prompt به یک زمینه با پتانسیل فوق‌العاده تبدیل شده است، که سزاوار کاوش مداوم است. برای یادگیری دستورالعمل‌های هماهنگی برای هر دو نوع برنامه، لطفاً به خواندن ادامه دهید. + +### خواندن تکمیلی + +1. [یادگیری Prompting](https://learnprompting.org/) +2. [مهندسی Prompt ChatGPT برای توسعه‌دهندگان](https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/) +3. [Prompts عالی ChatGPT](https://github.com/f/awesome-chatgpt-prompts) diff --git a/fa/guides/application-orchestrate/prompt-engineering/prompt-engineering-expert-mode.md b/fa/guides/application-orchestrate/prompt-engineering/prompt-engineering-expert-mode.md new file mode 100644 index 000000000..147421d41 --- /dev/null +++ b/fa/guides/application-orchestrate/prompt-engineering/prompt-engineering-expert-mode.md @@ -0,0 +1,182 @@ +# حالت کارشناسی راهنمایی + +در حال حاضر، تنظیمات ایجاد برنامه ها در Dify به طور پیش فرض روی **حالت پایه** تنظیم شده است. این حالت برای افرادی که مهارت فنی ندارند و به دنبال ایجاد سریع یک برنامه هستند، ایده آل است. به عنوان مثال، اگر می خواهید یک چت بات برای پایگاه دانش شرکتی یا یک مولد خلاصه مقاله ایجاد کنید، می توانید از **حالت پایه** برای طراحی کلمات `پیش راهنمایی`، اضافه کردن `سوال`، ادغام `محتوا` و مراحل ساده دیگر برای راه اندازی یک برنامه کامل استفاده کنید. برای اطلاعات بیشتر به 👉 [text-generation-application.md](../../user-guide/creating-dify-apps/prompt-engineering/text-generation-application.md "mention") و [conversation-application.md](../../user-guide/creating-dify-apps/prompt-engineering/conversation-application.md "mention"). + +💡با این حال، اگر شما یک توسعه دهنده هستید که تحقیقات عمیقی در مورد راهنمایی ها انجام داده اید، مطمئناً می خواهید راهنمایی ها را به روشی سفارشی تر طراحی کنید، در این صورت باید **حالت کارشناسی** را انتخاب کنید. در این حالت، شما مجوز سفارشی کردن راهنمایی های جامع را به جای استفاده از راهنمایی های بسته بندی شده از Dify دریافت می کنید. می توانید راهنمایی های از پیش ساخته شده را تغییر دهید، مکان `محتوا` و `سابقه` را تغییر دهید، پارامترهای لازم را تنظیم کنید و موارد دیگر. اگر با Playground OpenAI آشنا هستید، می توانید به سرعت با این حالت آشنا شوید. + +*** + +خوب، قبل از اینکه این حالت جدید را امتحان کنید، باید از برخی عناصر اساسی در آن آگاه باشید: + +* **Complete** + + هنگامی که یک مدل را انتخاب می کنید، اگر "COMPLETE" را در سمت راست نام مدل می بینید، نشان دهنده یک مدل تکمیل متن است، مانند + + این نوع مدل یک رشته متن آزاد را می پذیرد و یک تکمیل متن تولید می کند و تلاش می کند با هر زمینه یا الگوی که شما ارائه می دهید، مطابقت داشته باشد. به عنوان مثال، اگر راهنمایی `همانطور که رنه دکارت گفت، "من فکر می کنم، بنابراین"` را بنویسید، بسیار محتمل است که مدل `"من هستم."` را به عنوان تکمیل برگرداند. \\ +* **Chat** + + هنگامی که یک مدل را انتخاب می کنید، اگر "CHAT" را در سمت راست نام مدل می بینید، نشان دهنده یک مدل تکمیل چت است، مانند + + این نوع مدل یک لیست از پیام ها را به عنوان ورودی دریافت می کند و یک پیام تولید شده توسط مدل را به عنوان خروجی برمی گرداند. این مدل از سه نوع پیام تشکیل شده است: `SYSTEM`، `USER` و `ASSISTANT`. + + * `SYSTEM` + + پیام های سیستمی به هدایت رفتار دستیار هوش مصنوعی کمک می کنند. به عنوان مثال، می توانید شخصیت دستیار هوش مصنوعی را تغییر دهید یا دستورالعمل های خاصی در مورد نحوه عملکرد آن در طول مکالمه ارائه دهید. پیام های سیستمی اختیاری هستند. بدون پیام های سیستمی، دستیار هوش مصنوعی ممکن است طوری رفتار کند که از پیام های عمومی مانند `"شما یک دستیار مفید هستید."` استفاده می کند. + * `USER` + + پیام های کاربری درخواست ها یا نظرات را برای پاسخ دادن دستیار هوش مصنوعی ارائه می دهند. + * `ASSISTANT` + + پیام های دستیار پاسخ های قبلی دستیار را ذخیره می کنند، اما همچنین می توانند توسط شما برای ارائه نمونه هایی از رفتار مورد نظر نوشته شوند. \\ +* **Stop\_Sequences** + + Stop\_Sequences به کلمات، عبارات یا کاراکترهای خاصی اشاره دارد که برای ارسال سیگنال به LLM برای توقف تولید متن استفاده می شود. \\ +* **Blocks** + + + + هنگامی که کاربران یک سوال را وارد می کنند، برنامه سوال را به عنوان معیار جستجو برای دانش پردازش می کند. نتایج سازماندهی شده از جستجو سپس متغیر `Context` را جایگزین می کنند و به LLM اجازه می دهند برای پاسخ خود به محتوا ارجاع دهد. + + + + محتوای سوال فقط در مدل های تکمیل متن از برنامه های مکالمه ای در دسترس است. محتوای وارد شده توسط کاربر در طول مکالمه این متغیر را جایگزین می کند و یک نوبت جدید از گفتگو را آغاز می کند. + + + + سابقه مکالمه فقط در مدل تکمیل متن از برنامه های مکالمه ای در دسترس است. هنگام تعامل در مکالمات متعدد در برنامه های گفتگوی، Dify سوابق گفتگوی تاریخی را با توجه به قوانین از پیش ساخته شده جمع آوری و به هم متصل می کند و متغیر 'سابقه مکالمه' را جایگزین می کند. پیشوندهای `Human` و `Assistant` را می توان با کلیک بر روی `...` بعد از "سابقه مکالمه" تغییر داد. \\ +* **قالب راهنمایی** + + در این حالت، قبل از تنظیم رسمی، یک قالب اولیه در کادر راهنمایی ارائه می شود. ما می توانیم این قالب را به طور مستقیم برای نیازهای سفارشی تر برای LLM تغییر دهیم. انواع مختلف برنامه ها در حالت های مختلف دارای تغییرات هستند. + + برای اطلاعات بیشتر به 👉 [prompt-template.md](prompt-template.md "mention") + +*** + +## مقایسه دو حالت + +
بعد مقایسهحالت پایهحالت کارشناسی
نمایش راهنمایی های از پیش ساخته شدهنامرئیقابل مشاهده
طراحی خودکارموجودغیرفعال
درج متغیرموجودموجود
اعتبار سنجی بلوکغیرفعالموجود
SYSTEM / USER / ASSISTANTنامرئیقابل مشاهده
تنظیمات پارامتر محتواموجودموجود
LOG راهنماییموجودموجود
Stop_Sequencesغیرفعالموجود
+ +## راهنمای عملیاتی + +### 1. نحوه ورود به حالت کارشناسی + +بعد از ایجاد یک برنامه، می توانید به **حالت کارشناسی** در صفحه طراحی راهنمایی بروید. + +

دسترسی به حالت کارشناسی

+ +{% hint style="warning" %} +بعد از تغییر راهنمایی ها در **حالت کارشناسی** و انتشار برنامه، نمی توانید به **حالت پایه** برگردید. +{% endhint %} + +### 2. تغییر پارامترهای محتوا + +در هر دو حالت، می توانید پارامترها را برای درج محتوا تغییر دهید، که شامل **TopK** و **آستانه امتیاز** می شود. + +

پارامترهای محتوا

+ +{% hint style="warning" %} +لطفاً توجه داشته باشید که فقط بعد از آپلود محتوا، راهنمایی های از پیش ساخته شده حاوی در صفحه طراحی راهنمایی نمایش داده می شوند. +{% endhint %} + +**TopK:** مقدار یک عدد صحیح از 1 تا 10 است. + +این مقدار برای فیلتر کردن قطعات متنی با بیشترین شباهت به سوال کاربر استفاده می شود. سیستم همچنین تعداد قطعات را بر اساس اندازه پنجره محتوا مدل انتخاب شده به طور پویا تنظیم می کند. مقدار پیش فرض سیستم 2 است. این مقدار توصیه می شود بین 2 تا 5 تنظیم شود، زیرا انتظار می رود پاسخ هایی را دریافت کنیم که بیشتر با محتوای تعبیه شده مطابقت دارند. \\ + +**آستانه امتیاز:** مقدار یک عدد اعشاری از 0 تا 1 است و دارای دو رقم اعشار است. + +این مقدار برای تنظیم آستانه شباهت برای انتخاب بخش متن استفاده می شود، به این معنی که فقط قطعات متنی را فراخوانی می کند که از امتیاز تنظیم شده تجاوز می کنند. به طور پیش فرض، سیستم این تنظیم را غیرفعال می کند، به این معنی که هیچ فیلتر کردن بر اساس مقدار شباهت قطعات متنی فراخوانی شده وجود ندارد. هنگامی که فعال می شود، مقدار پیش فرض 0.7 است. ما توصیه می کنیم این تنظیم را به طور پیش فرض غیرفعال نگه دارید. اگر نیازهای پاسخ دقیق تری دارید، می توانید یک مقدار بالاتر را تنظیم کنید، اگرچه توصیه نمی شود آن را به طور غیرعادی بالا تنظیم کنید. + +### 3. **Stop\_Sequences** + +ما انتظار نداریم که LLM محتوای بیش از حد تولید کند. بنابراین، لازم است کلمات، عبارات یا کاراکترهای خاصی را برای ارسال سیگنال به LLM برای توقف تولید متن تنظیم کنیم. تنظیم پیش فرض `Human:` است. به عنوان مثال، اگر _Few-Shot_ زیر را نوشته اید: + +``` +Human1: رنگ آسمان چیست؟ + +Assistant1: آسمان آبی است. + +Human1: رنگ آتش چیست؟ + +Assistant1: آتش قرمز است. + +Human1: رنگ خاک چیست؟ + +Assistant1: +``` + +سپس، در پارامترهای مدل، باید `Stop_Sequences` را پیدا کنید و `Human1:` را وارد کنید. فراموش نکنید که کلید `Tab` را فشار دهید. به این ترتیب، LLM فقط با یک جمله در پاسخ به جای تولید هر گونه گفتگوی اضافی پاسخ می دهد: + +``` +خاک زرد است. +``` + +زیرا LLM قبل از `Human1:` بعدی تولید محتوا را متوقف می کند. + +### 4. استفاده از "/" برای درج متغیرها و بلوک ها + +می توانید "/" را در ویرایشگر متن وارد کنید تا بلوک هایی را به سرعت برای درج در راهنمایی به وجود آورید. + +

میانبر "/"

+ +{% hint style="warning" %} +به جز `Variables`، دیگر بلوک ها را نمی توان به طور مکرر درج کرد. در برنامه ها و مدل های مختلف، بلوک هایی که می توان درج کرد، بر اساس ساختارهای مختلف قالب راهنمایی متفاوت هستند. +{% endhint %} + +### 5. وارد کردن پیش راهنمایی + +قالب راهنمایی اولیه سیستم پارامترها و نیازهای لازم برای پاسخ LLM را ارائه می دهد. برای اطلاعات بیشتر به 👉 [prompt-template.md](prompt-template.md "mention"). + +هسته توسعه اولیه توسط توسعه دهندگان، پیش راهنمایی برای مکالمه است. این امر به طراحی راهنمایی های از پیش ساخته شده نیاز دارد، با موقعیت درج پیشنهادی در زیر: + +``` +هنگام پاسخ به کاربر: +- اگر نمی دانید، فقط بگویید که نمی دانید. +- اگر در مورد آن مطمئن نیستید، برای روشن شدن سوال کنید. +از ذکر اینکه اطلاعات را از محتوا به دست آورده اید، خودداری کنید. +و با توجه به زبان سوال کاربر پاسخ دهید. + +شما یک دستیار خدمات مشتری برای شرکت اپل هستید و می توانید خدمات مشاوره آیفون را به کاربران ارائه دهید. +هنگام پاسخ دادن، باید مشخصات دقیق آیفون را فهرست کنید و باید این اطلاعات را در یک جدول عمودی {{Format}} خروجی دهید. اگر لیست خیلی طولانی باشد، باید تغییر داده شود. +مجاز هستید برای تولید خروجی معقول تر، زمان زیادی برای فکر کردن اختصاص دهید. +توجه: شما در حال حاضر فقط دانش بخشی از مدل های آیفون را دارید، نه همه آنها. +``` + +همچنین می توانید قالب راهنمایی اولیه را سفارشی و تغییر دهید. به عنوان مثال، اگر می خواهید پاسخ های LLM به زبان انگلیسی باشد، می توانید راهنمایی های از پیش ساخته شده را به شرح زیر تغییر دهید: + +``` +هنگام پاسخ به کاربر: +- اگر نمی دانید، فقط بگویید که نمی دانید. +- اگر در مورد آن مطمئن نیستید، برای روشن شدن سوال کنید. +از ذکر اینکه اطلاعات را از محتوا به دست آورده اید، خودداری کنید. +و با توجه به زبان انگلیسی پاسخ دهید. +``` + +### 6. بررسی LOG راهنمایی + +در طول اشکال زدایی، نه تنها می توانید ورودی کاربر و پاسخ های LLM را بررسی کنید، بلکه می توانید با کلیک بر روی نماد در گوشه بالا سمت چپ دکمه ارسال پیام، راهنمایی های کامل را مشاهده کنید. این امر برای توسعه دهندگان مناسب است تا تأیید کنند که آیا محتوای متغیر ورودی، محتوا، سابقه چت و محتوای سوال مطابق با انتظارات است یا خیر. + +#### 6.1 دسترسی به LOG راهنمایی + +در رابط پیش نمایش اشکال زدایی، بعد از تعامل با هوش مصنوعی در یک مکالمه، به سادگی نشانگر ماوس را روی هر جلسه کاربر قرار دهید و دکمه نماد "LOG" را در گوشه بالا سمت چپ مشاهده خواهید کرد. برای مشاهده LOG راهنمایی روی آن کلیک کنید. + +

دسترسی به LOG راهنمایی

+ +در LOG راهنمایی، ما به وضوح می بینیم: + +1. راهنمایی های کامل از پیش ساخته شده. +2. قطعات متنی مرتبط که در جلسه فعلی به آنها ارجاع داده شده است. +3. سوابق جلسه تاریخی. + +

LOG راهنمایی

+ +از لاگ، می توانیم راهنمایی های کاملی که توسط سیستم جمع آوری و به LLM ارسال شده اند را مشاهده کنیم و می توانیم ورودی راهنمایی را بر اساس نتایج اشکال زدایی به طور مداوم بهبود بخشیم. + +#### 6.2 ردیابی تاریخچه اشکال زدایی + +در رابط اصلی برنامه اولیه، می توانید "Logs & Ann." را در نوار پیمایش سمت چپ پیدا کنید. با کلیک روی آن می توانید تمام لاگ ها را مشاهده کنید. در رابط اصلی "Logs & Ann."، می توانید روی هر ورودی لاگ مکالمه کلیک کنید. در کادر محاوره ای سمت راست که ظاهر می شود، به سادگی نشانگر ماوس را روی مکالمه قرار دهید و سپس برای بررسی LOG راهنمایی روی دکمه "LOG" کلیک کنید. + +برای اطلاعات بیشتر به 👉 [logs.md](../logs.md "mention") . + +

Logs & Ann.

+ + diff --git a/fa/guides/application-orchestrate/prompt-engineering/prompt-template.md b/fa/guides/application-orchestrate/prompt-engineering/prompt-template.md new file mode 100644 index 000000000..e725f956e --- /dev/null +++ b/fa/guides/application-orchestrate/prompt-engineering/prompt-template.md @@ -0,0 +1,151 @@ +# الگوهای درخواست + +برای پاسخگویی به نیازهای سفارشی‌تر توسعه‌دهندگان برای LLM، دیفای تمام درخواست‌های کامل تعبیه شده در **حالت کارشناسی** را باز کرده است و الگوهای اولیه را در رابط ساخت قرار داده است. در زیر چهار الگوی اولیه برای مرجع ارائه شده است: + +### 1. استفاده از مدل‌های چت برای ساخت برنامه‌های گفتگو + +* **SYSTEM** + +``` +از متن زیر به عنوان دانش یادگرفته شده خود، در داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، فقط بگویید نمی‌دانید. +- اگر هنگام عدم اطمینان نمی‌دانید، درخواست روشن‌سازی کنید. +از ذکر اینکه اطلاعات را از متن به دست آورده‌اید، خودداری کنید. +و با توجه به زبان پرسش کاربر پاسخ دهید. +{{pre_prompt}} +``` + +* **USER** + +``` +{{Query}} // متغیرهای پرسش را اینجا وارد کنید. +``` + +* **ASSISTANT** + +``` +"" +``` + +#### **ساختار درخواست:** + +* `Context` +* `Pre-prompt` +* `Query` + +### 2. استفاده از مدل‌های چت برای ساخت برنامه‌های مولد متن + +* **SYSTEM** + +``` +از متن زیر به عنوان دانش یادگرفته شده خود، در داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، فقط بگویید نمی‌دانید. +- اگر هنگام عدم اطمینان نمی‌دانید، درخواست روشن‌سازی کنید. +از ذکر اینکه اطلاعات را از متن به دست آورده‌اید، خودداری کنید. +و با توجه به زبان پرسش کاربر پاسخ دهید. +{{pre_prompt}} +``` + +* **USER** + +``` +{{Query}} // متغیرهای پرسش را اینجا وارد کنید. +``` + +* **ASSISTANT** + +``` +"" +``` + +#### **ساختار درخواست:** + +* `Context` +* `Pre-prompt` +* `Query` + +### 3. استفاده از مدل‌های کامل برای ساخت برنامه‌های گفتگو + +``` +از متن زیر به عنوان دانش یادگرفته شده خود، در داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، فقط بگویید نمی‌دانید. +- اگر هنگام عدم اطمینان نمی‌دانید، درخواست روشن‌سازی کنید. +از ذکر اینکه اطلاعات را از متن به دست آورده‌اید، خودداری کنید. +و با توجه به زبان پرسش کاربر پاسخ دهید. + +{{pre_prompt}} + +در اینجا تاریخچه چت بین انسان و دستیار، در داخل برچسب‌های XML قرار دارد. + + +{{#histories#}} + + + +انسان: {{#query#}} + +دستیار: +``` + +**ساختار درخواست:** + +* `Context` +* `Pre-prompt` +* `History` +* `Query` + +### 4. استفاده از مدل‌های کامل برای ساخت برنامه‌های مولد متن + +``` +از متن زیر به عنوان دانش یادگرفته شده خود، در داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، فقط بگویید نمی‌دانید. +- اگر هنگام عدم اطمینان نمی‌دانید، درخواست روشن‌سازی کنید. +از ذکر اینکه اطلاعات را از متن به دست آورده‌اید، خودداری کنید. +و با توجه به زبان پرسش کاربر پاسخ دهید. + +{{pre_prompt}} +{{query}} +``` + +#### **ساختار درخواست:** + +* `Context` +* `Pre-prompt` +* `Query` + +{% hint style="warning" %} +دیفای با برخی از ارائه دهندگان مدل برای بهینه سازی عمیق مشترک درخواست‌های سیستم همکاری کرده است، و الگوهای اولیه برای برخی مدل‌ها ممکن است با مثال‌های ارائه شده در بالا متفاوت باشد. +{% endhint %} + +### **تعاریف پارامتر** + +* **Context**: برای وارد کردن متن مرتبط از دانش به عنوان زمینه در درخواست‌های کامل استفاده می‌شود. +* **Pre-prompt**: درخواست‌های پیش‌فرض مرتب شده در **حالت پایه** در درخواست‌های کامل وارد می‌شوند. +* **History**: هنگام ساخت یک برنامه گفتگو با استفاده از مدل‌های مولد متن، سیستم تاریخچه گفتگوی کاربر را به عنوان زمینه در درخواست‌های کامل وارد می‌کند. از آنجایی که برخی مدل‌ها ممکن است نسبت به پیشوندهای نقش متفاوت پاسخ دهند، شما همچنین می‌توانید نام پیشوند نقش را در تنظیمات تاریخچه گفتگو تغییر دهید، برای مثال، تغییر نام "دستیار" به "AI". +* **Query**: محتوای پرسش نشان دهنده مقادیر متغیر مورد استفاده برای وارد کردن سوالاتی است که کاربران در طول گفتگو وارد می‌کنند. + + diff --git a/fa/guides/application-orchestrate/text-generation-application.md b/fa/guides/application-orchestrate/text-generation-application.md new file mode 100644 index 000000000..38bcfeb1b --- /dev/null +++ b/fa/guides/application-orchestrate/text-generation-application.md @@ -0,0 +1,69 @@ +# مولد متن + +برنامه‌های تولید متن، برنامه‌هایی هستند که می‌توانند به طور خودکار متن با کیفیت بالا بر اساس درخواست‌هایی که توسط کاربران ارائه می‌شود تولید کنند. آنها می‌توانند انواع مختلفی از متن مانند خلاصه مقاله، ترجمه و غیره را تولید کنند. + +### **سناریوهای قابل اجرا** + +برنامه‌های تولید متن برای سناریوهایی مناسب هستند که به مقدار زیادی تولید متن نیاز دارند، مانند رسانه‌های خبری، تبلیغات، سئو، بازاریابی و غیره. آنها می‌توانند خدمات تولید متن کارآمد و سریع را برای این صنایع ارائه دهند، هزینه‌های کار را کاهش دهند و بهره‌وری تولید را بهبود بخشند. + +### **نحوه ساخت** + +برنامه‌های تولید متن از موارد زیر پشتیبانی می‌کنند: پیشوند کلمات راهنما، متغیرها، زمینه و تولید محتوای بیشتر مشابه. + +در اینجا، ما از یک برنامه ترجمه به عنوان مثال برای معرفی نحوه ساخت یک برنامه تولید متن استفاده می‌کنیم. + +#### **مرحله 1: ساخت برنامه** + +برای ساخت یک برنامه، روی دکمه "ساخت برنامه" در صفحه اصلی کلیک کنید. نام برنامه را وارد کنید و "مولد متن" را به عنوان نوع برنامه انتخاب کنید. + +

ساخت برنامه

+ +#### مرحله 2: ساخت برنامه + +بعد از اینکه برنامه با موفقیت ساخته شد، به طور خودکار به صفحه مرور کلی برنامه هدایت خواهید شد. برای ساخت برنامه، روی منوی سمت چپ: "**مهندسی راهنما**" کلیک کنید. + +
+ +**2.1 پر کردن راهنماهای پیشوند** + +راهنماها برای ارائه مجموعه ای از دستورالعمل ها و محدودیت ها به پاسخ هوش مصنوعی استفاده می شوند. متغیرهای فرم را می توان وارد کرد، مانند `{{input}}`. مقدار متغیرها در راهنماها با مقداری که توسط کاربر وارد شده است جایگزین خواهد شد. + +راهنمایی که ما در اینجا پر می کنیم این است: `محتوا را به: {{language}} ترجمه کنید. محتوای آن به شرح زیر است:` + +![]() + +**2.2 افزودن زمینه** + +اگر برنامه می خواهد محتوایی بر اساس مکالمات متنی خصوصی تولید کند، می توان از ویژگی [دانش](../../../features/datasets/) ما استفاده کرد. برای افزودن پایگاه دانش، روی دکمه "افزودن" در زمینه کلیک کنید. + +![]() + +**2.3 افزودن آینده: تولید بیشتر شبیه این** + +تولید بیشتر شبیه این به شما امکان می دهد تا چندین متن را به طور همزمان تولید کنید که می توانید آنها را ویرایش کنید و به تولید از آنها ادامه دهید. برای فعال کردن این ویژگی، روی دکمه "افزودن آینده" در گوشه بالا سمت چپ کلیک کنید. + +
+ +**2.4 رفع اشکال** + +ما با وارد کردن متغیرها و پرس و جو از محتوا در سمت راست اشکال زدایی می کنیم. برای مشاهده نتایج عمل، روی دکمه "اجرا" کلیک کنید. + +![]() + +اگر نتایج رضایت بخش نیستند، می توانید راهنماها و پارامترهای مدل را تنظیم کنید. برای تنظیم پارامترهای مدل، روی نام مدل در گوشه بالا سمت راست کلیک کنید: + +![]() + +**2.5 انتشار** + +بعد از رفع اشکال از برنامه، برای ذخیره تنظیمات فعلی، روی دکمه "انتشار" در گوشه بالا سمت راست کلیک کنید. + +### **به اشتراک گذاری برنامه** + +می توانید آدرس اشتراک گذاری برنامه را در صفحه مرور کلی پیدا کنید. برای پیش نمایش برنامه اشتراک گذاری شده، روی دکمه "پیش نمایش" کلیک کنید. برای به دست آوردن آدرس لینک اشتراک گذاری، روی دکمه "اشتراک گذاری" کلیک کنید. برای تنظیم اطلاعات برنامه اشتراک گذاری شده، روی دکمه "تنظیمات" کلیک کنید. + +
+ +اگر می خواهید برنامه اشتراک گذاری شده در خارج را سفارشی کنید، می توانید [قالب وب اپلیکیشن](https://github.com/langgenius/webapp-text-generator) منبع باز ما را Fork کنید. بر اساس قالب، می توانید برنامه را برای برآورده کردن شرایط خاص و الزامات سبک خود تغییر دهید. + + diff --git a/fa/guides/application-publishing/README.md b/fa/guides/application-publishing/README.md new file mode 100644 index 000000000..73fbed647 --- /dev/null +++ b/fa/guides/application-publishing/README.md @@ -0,0 +1,8 @@ +# راه‌اندازی برنامه‌های Dify + +برای اطلاعات بیشتر، لطفاً به بخش‌های زیر مراجعه کنید: + +- [انتشار به عنوان یک وب‌اپلیکیشن تک صفحه‌ای](launch-your-webapp-quickly/) +- [جاسازی در وب‌سایت‌ها](embedding-in-websites.md) +- [توسعه با API ها](developing-with-apis.md) +- [بر اساس قالب‌های فرانت‌اند](based-on-frontend-templates.md) diff --git a/fa/guides/application-publishing/based-on-frontend-templates.md b/fa/guides/application-publishing/based-on-frontend-templates.md new file mode 100644 index 000000000..1689469ad --- /dev/null +++ b/fa/guides/application-publishing/based-on-frontend-templates.md @@ -0,0 +1,41 @@ +# بر اساس الگوی وب اپ + +اگر توسعه دهندگان در حال توسعه محصولات جدید از ابتدا یا در مرحله طراحی نمونه اولیه محصول هستند، می توانند با استفاده از Dify به سرعت سایت های هوش مصنوعی را راه اندازی کنند. در عین حال، Dify امیدوار است که توسعه دهندگان بتوانند به طور کامل آزادانه انواع مختلف برنامه های کاربردی سمت کلاینت را ایجاد کنند. به همین دلیل، ما موارد زیر را ارائه می دهیم: + +* **SDK** برای دسترسی سریع به API Dify در زبان های مختلف +* **الگوی وب اپ** برای داربست توسعه وب اپ برای هر نوع برنامه + +الگوهای وب اپ تحت مجوز MIT متن باز هستند. شما آزاد هستید که آنها را اصلاح و مستقر کنید تا به تمام قابلیت های Dify دست یابید یا به عنوان کد مرجع برای پیاده سازی برنامه خود از آنها استفاده کنید. + +می توانید این الگوها را در GitHub بیابید: + +* [برنامه مکالمه](https://github.com/langgenius/webapp-conversation) +* [برنامه تولید متن](https://github.com/langgenius/webapp-text-generator) + +سریع ترین راه برای استفاده از الگوی وب اپ، کلیک کردن روی "**از این الگو استفاده کنید**" در GitHub است که معادل شاخه زدن یک مخزن جدید است. سپس باید ID برنامه Dify و کلید 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 = '' +``` + +> ID برنامه را می توان از URL برنامه بدست آورد، جایی که رشته های طولانی کاراکتر ID منحصر به فرد برنامه هستند. + +هر الگوی وب اپ یک فایل README حاوی دستورالعمل های استقرار را ارائه می دهد. معمولاً الگوهای وب اپ شامل یک سرویس backend سبک وزن هستند تا اطمینان حاصل شود که کلیدهای API توسعه دهندگان مستقیماً در معرض کاربران قرار نمی گیرند. + +این الگوهای وب اپ می توانند به شما در ساخت سریع نمونه اولیه برنامه های هوش مصنوعی و استفاده از تمام قابلیت های Dify کمک کنند. اگر برنامه ها یا الگوهای جدید خود را بر اساس آنها توسعه می دهید، آزادانه با ما به اشتراک بگذارید. diff --git a/fa/guides/application-publishing/developing-with-apis.md b/fa/guides/application-publishing/developing-with-apis.md new file mode 100644 index 000000000..7bc7c7f7e --- /dev/null +++ b/fa/guides/application-publishing/developing-with-apis.md @@ -0,0 +1,130 @@ +# توسعه با APIها + +Dify یک API "Backend-as-a-Service" ارائه می‌دهد که مزایای متعددی برای توسعه‌دهندگان برنامه‌های هوش مصنوعی به ارمغان می‌آورد. این رویکرد به توسعه‌دهندگان اجازه می‌دهد تا مستقیماً به قابلیت‌های قدرتمند مدل‌های زبانی بزرگ (LLM) در برنامه‌های سمت کاربر دسترسی داشته باشند بدون اینکه پیچیدگی‌های معماری سمت سرور و فرآیندهای استقرار را تحمل کنند. + +### مزایای استفاده از API Dify + +* اجازه دسترسی امن برنامه‌های سمت کاربر به قابلیت‌های LLM بدون توسعه سمت سرور +* طراحی بصری برنامه‌ها با به‌روزرسانی‌های بلادرنگ در تمام کلاینت‌ها +* APIهای LLM اصلی با احاطه کامل +* جابه‌جایی آسان بین ارائه ‌دهندگان LLM و مدیریت متمرکز کلیدهای API +* عملیات بصری برنامه‌ها، از جمله تجزیه و تحلیل لاگ، حاشیه نویسی و مشاهده فعالیت‌های کاربر +* ارائه مداوم ابزارها، افزونه‌ها و دانش جدید + +### چگونگی استفاده + +یک برنامه را انتخاب کنید و در بخش برنامه‌ها، در ناوبری سمت چپ، "دسترسی به API" را پیدا کنید. در این صفحه، می‌توانید مستندات API ارائه شده توسط Dify را مشاهده کنید و اعتبارنامه‌های دسترسی به API را مدیریت کنید. + +

مستندات API

+ +شما می‌توانید اعتبارنامه‌های دسترسی چندگانه برای یک برنامه ایجاد کنید تا به کاربران یا توسعه‌دهندگان مختلف تحویل دهید. این به این معنی است که کاربران API می‌توانند از قابلیت‌های هوش مصنوعی ارائه شده توسط توسعه‌دهنده برنامه استفاده کنند، اما مهندسی Prompt، دانش و قابلیت‌های ابزاری زیربنایی حفظ می‌شوند. + +{% hint style="warning" %} +در بهترین روش‌ها، کلیدهای API باید از طریق سمت سرور فراخوانی شوند، نه اینکه به طور مستقیم در کد یا درخواست‌های سمت کاربر در متن ساده نمایش داده شوند. این به جلوگیری از سوء استفاده یا حمله به برنامه شما کمک می‌کند. +{% endhint %} + +به عنوان مثال، اگر شما یک توسعه‌دهنده در یک شرکت مشاوره‌ای هستید، می‌توانید قابلیت‌های هوش مصنوعی مبتنی بر پایگاه داده خصوصی شرکت را به کاربران نهایی یا توسعه‌دهندگان ارائه دهید، بدون اینکه داده‌ها و طراحی منطق هوش مصنوعی خود را در معرض دید قرار دهید. این امر تضمین می‌کند که ارائه خدمات ایمن و پایدار است که به اهداف تجاری پاسخ می‌دهد. + +### برنامه تولید متن + +این برنامه‌ها با فراخوانی API completion-messages و ارسال ورودی کاربر برای دریافت نتایج متن تولید شده، برای تولید متن با کیفیت بالا، مانند مقالات، خلاصه‌ ها، ترجمه‌ها و غیره استفاده می‌شوند. پارامترهای مدل و الگوهای Prompt استفاده شده برای تولید متن بستگی به تنظیمات توسعه‌دهنده در صفحه Dify Prompt Arrangement دارد. + +شما می‌توانید مستندات 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": 'سلام، حالت چطوره؟'}, + "response_mode": "streaming", + "user": "abc-123" +} + +response = requests.post(url, headers=headers, data=json.dumps(data)) + +print(response.text) +``` +{% endtab %} +{% endtabs %} + +### برنامه‌های محاوره‌ای + +برنامه‌های محاوره‌ای از طریق یک فرمت سوال و جواب، گفتگوی مداوم با کاربران را تسهیل می‌کنند. برای شروع یک مکالمه، شما باید API `chat-messages` را فراخوانی کنید. یک `conversation_id` برای هر جلسه تولید می‌شود و باید در تماس‌های API بعدی برای حفظ جریان مکالمه گنجانده شود. + +#### نکات کلیدی برای `conversation_id`: + +- **تولید `conversation_id`:** هنگام شروع یک مکالمه جدید، فیلد `conversation_id` را خالی بگذارید. سیستم یک `conversation_id` جدید تولید می‌کند و آن را برمی‌گرداند، که شما در تعاملات بعدی برای ادامه گفتگو از آن استفاده خواهید کرد. +- **مدیریت `conversation_id` در جلسات موجود:** پس از تولید یک `conversation_id`، تماس‌های آینده با API باید این `conversation_id` را شامل شوند تا اطمینان حاصل شود که گفتگو با ربات Dify ادامه دارد. وقتی یک `conversation_id` قبلی منتقل می‌شود، هر `inputs` جدیدی نادیده گرفته خواهد شد. فقط `query` برای ادامه گفتگو پردازش می‌شود. +- **مدیریت متغیرهای پویا:** اگر نیازی به تغییر منطق یا متغیرها در طول جلسه وجود دارد، می‌توانید از متغیرهای مکالمه (متغیرهای خاص جلسه) برای تنظیم رفتار یا پاسخ ربات استفاده کنید. + +شما می‌توانید مستندات API و درخواست‌های نمونه برای این برنامه را در **برنامه‌ها -> دسترسی به API** بیابید. + +در اینجا مثالی از فراخوانی API `chat-messages` ارائه شده است: + +{% 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": "سلام", + "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": "سلام", + "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 %} + + diff --git a/fa/guides/application-publishing/embedding-in-websites.md b/fa/guides/application-publishing/embedding-in-websites.md new file mode 100644 index 000000000..2e19345a2 --- /dev/null +++ b/fa/guides/application-publishing/embedding-in-websites.md @@ -0,0 +1,136 @@ +# جاسازی در وب‌سایت‌ها + +اپلیکیشن‌های Dify را می‌توان با استفاده از یک iframe در وب‌سایت‌ها جاسازی کرد. این کار به شما امکان می‌دهد اپلیکیشن Dify خود را در وب‌سایت، وبلاگ یا هر صفحه وب دیگری ادغام کنید. + +هنگامی که از جاسازی دکمه حباب گفتگوی Dify در وب‌سایت خود استفاده می‌کنید، می‌توانید سبک، موقعیت و سایر تنظیمات دکمه را سفارشی کنید. + +## سفارشی‌سازی دکمه حباب گفتگوی Dify + +دکمه حباب گفتگوی Dify را می‌توان از طریق گزینه‌های پیکربندی زیر سفارشی کرد: + +```javascript +window.difyChatbotConfig = { + // اجباری، به طور خودکار توسط Dify تولید می‌شود + token: 'YOUR_TOKEN', + // اختیاری، پیش‌فرض false است + isDev: false, + // اختیاری، وقتی isDev برابر true است، پیش‌فرض 'https://dev.udify.app' است، در غیر این صورت پیش‌فرض 'https://udify.app' است + baseUrl: 'YOUR_BASE_URL', + // اختیاری، می‌تواند هر ویژگی معتبر HTMLElement به غیر از `id`، مانند `style`، `className` و غیره را بپذیرد + containerProps: {}, + // اختیاری، اینکه آیا اجازه داده می‌شود دکمه کشیده شود، پیش‌فرض `false` است + draggable: false, + // اختیاری، محوری که دکمه اجازه کشیدن در آن را دارد، پیش‌فرض `both` است، می‌تواند `x`، `y`، `both` باشد + dragAxis: 'both', + // اختیاری، یک شیء از ورودی‌هایی که در گفتگوی Dify تنظیم شده‌اند + inputs: { + // کلید نام متغیر است + // به عنوان مثال: + // name: "NAME" + } +} +``` + +## نادیده گرفتن سبک‌های پیش‌فرض دکمه + +می‌توانید سبک پیش‌فرض دکمه را با استفاده از متغیرهای CSS یا گزینه `containerProps` نادیده بگیرید. این روش‌ها را بر اساس خاص بودن CSS اعمال کنید تا به سفارشی‌سازی مورد نظر خود برسید. + +### 1. اصلاح متغیرهای CSS + +متغیرهای CSS زیر برای سفارشی‌سازی پشتیبانی می‌شوند: + +```css +/* فاصله دکمه تا پایین، پیش‌فرض `1rem` است */ +--dify-chatbot-bubble-button-bottom + +/* فاصله دکمه تا راست، پیش‌فرض `1rem` است */ +--dify-chatbot-bubble-button-right + +/* فاصله دکمه تا چپ، پیش‌فرض `unset` است */ +--dify-chatbot-bubble-button-left + +/* فاصله دکمه تا بالا، پیش‌فرض `unset` است */ +--dify-chatbot-bubble-button-top + +/* رنگ پس‌زمینه دکمه، پیش‌فرض `#155EEF` است */ +--dify-chatbot-bubble-button-bg-color + +/* عرض دکمه، پیش‌فرض `50px` است */ +--dify-chatbot-bubble-button-width + +/* ارتفاع دکمه، پیش‌فرض `50px` است */ +--dify-chatbot-bubble-button-height + +/* شعاع مرز دکمه، پیش‌فرض `25px` است */ +--dify-chatbot-bubble-button-border-radius + +/* سایه جعبه دکمه، پیش‌فرض `rgba(0, 0, 0, 0.2) 0px 4px 8px 0px)` است */ +--dify-chatbot-bubble-button-box-shadow + +/* تبدیل شناور دکمه، پیش‌فرض `scale(1.1)` است */ +--dify-chatbot-bubble-button-hover-transform +``` + +برای تغییر رنگ پس‌زمینه به #ABCDEF، این CSS را اضافه کنید: + +```css +#dify-chatbot-bubble-button { + --dify-chatbot-bubble-button-bg-color: #ABCDEF; +} +``` + +### 2. استفاده از `containerProps` + +سبک‌های inline را با استفاده از ویژگی `style` تنظیم کنید: + +```javascript +window.difyChatbotConfig = { + // ... سایر پیکربندی‌ها + containerProps: { + style: { + backgroundColor: '#ABCDEF', + width: '60px', + height: '60px', + borderRadius: '30px', + }, + // برای سرریزهای کوچک سبک، می‌توانید از یک مقدار رشته‌ای برای ویژگی `style` نیز استفاده کنید: + // style: 'background-color: #ABCDEF; width: 60px;', + }, +} +``` + +کلاس‌های CSS را با استفاده از ویژگی `className` اعمال کنید: + +```javascript +window.difyChatbotConfig = { + // ... سایر پیکربندی‌ها + containerProps: { + className: 'dify-chatbot-bubble-button-custom my-custom-class', + }, +} +``` + +### 3. ارسال `inputs` + +چهار نوع ورودی پشتیبانی می‌شوند: + +1. **`text-input`**: هر مقداری را می‌پذیرد. اگر طول رشته ورودی از حداکثر طول مجاز فراتر رود، رشته کوتاه می‌شود. +2. **`paragraph`**: مشابه `text-input`، هر مقداری را می‌پذیرد و اگر رشته طولانی‌تر از حداکثر طول باشد، کوتاه می‌شود. +3. **`number`**: یک عدد یا یک رشته عددی را می‌پذیرد. اگر یک رشته داده شود، با استفاده از تابع `Number` به یک عدد تبدیل می‌شود. +4. **`options`**: هر مقداری را می‌پذیرد، به شرطی که با یکی از گزینه‌های پیش‌تنظیم مطابقت داشته باشد. + +مثال پیکربندی: + +```javascript +window.difyChatbotConfig = { + // سایر تنظیمات پیکربندی... + inputs: { + name: 'apple', + }, +} +``` + +توجه: هنگام استفاده از اسکریپت embed.js برای ایجاد یک iframe، هر مقدار ورودی پردازش می‌شود — فشرده شده با استفاده از GZIP و رمزگذاری شده در base64 — قبل از الحاق به URL. + +به عنوان مثال، URL با مقادیر ورودی پردازش شده به این شکل خواهد بود: +`http://localhost/chatbot/{token}?name=H4sIAKUlmWYA%2FwWAIQ0AAACDsl7gLuiv2PQEUNAuqQUAAAA%3D` diff --git a/fa/guides/application-publishing/launch-your-webapp-quickly/README.md b/fa/guides/application-publishing/launch-your-webapp-quickly/README.md new file mode 100644 index 000000000..5d576a926 --- /dev/null +++ b/fa/guides/application-publishing/launch-your-webapp-quickly/README.md @@ -0,0 +1,44 @@ +# انتشار به عنوان یک وب اپلیکیشن تک صفحه‌ای + +یکی از مزایای ایجاد برنامه‌های کاربردی هوش مصنوعی با Dify این است که می‌توانید در عرض چند دقیقه یک وب اپلیکیشن هوش مصنوعی تک صفحه‌ای را منتشر کنید که برای همه کاربران در اینترنت قابل دسترسی باشد. + +* اگر از نسخه منبع باز خود میزبانی استفاده می‌کنید، برنامه روی سرور شما اجرا می‌شود. +* اگر از سرویس ابری استفاده می‌کنید، برنامه در [https://udify.app/](https://udify.app/) میزبانی می‌شود. + +### انتشار یک وب سایت هوش مصنوعی + +کلید **"در سرویس / غیرفعال"** را تغییر دهید، URL وب اپلیکیشن شما فوراً به طور عمومی در اینترنت به اشتراک گذاشته خواهد شد. + +
+ +ما رابط کاربری از پیش تعیین شده وب اپلیکیشن را برای دو نوع برنامه زیر تنظیم کرده‌ایم: + +* **تولید متن (پیش نمایش)** + +{% content-ref url="text-generator.md" %} +[text-generator.md](text-generator.md) +{% endcontent-ref %} + +* **گفتگو (پیش نمایش)** + +{% content-ref url="conversation-application.md" %} +[conversation-application.md](conversation-application.md) +{% endcontent-ref %} + +### تنظیم سایت هوش مصنوعی شما + +با کلیک روی دکمه "تنظیمات" می‌توانید زبان، تم رنگی، مالکیت حق چاپ، لینک سیاست حفظ حریم خصوصی و سلب مسئولیت را تغییر دهید. + +![](../../../.gitbook/assets/en-web-app-settings.png) + +در حال حاضر، وب اپلیکیشن از چندین زبان پشتیبانی می‌کند: انگلیسی، چینی ساده، چینی سنتی، پرتغالی، آلمانی، ژاپنی، کره‌ای، اوکراینی و ویتنامی. اگر می‌خواهید از زبان‌های بیشتری پشتیبانی شود، می‌توانید در GitHub یک Issue ارسال کنید تا درخواست پشتیبانی کنید یا یک PR ارسال کنید تا کد را مشارکت دهید. + +{% content-ref url="web-app-settings.md" %} +[web-app-settings.md](web-app-settings.md) +{% endcontent-ref %} + +### جاسازی سایت هوش مصنوعی شما + +همچنین می‌توانید وب اپلیکیشن Dify را در پروژه وب، وبلاگ یا هر صفحه وب دیگری ادغام کنید. برای اطلاعات بیشتر، لطفا به [جاسازی در وب‌سایت‌ها](https://docs.dify.ai/guides/application-publishing/embedding-in-websites) مراجعه کنید. + + diff --git a/fa/guides/application-publishing/launch-your-webapp-quickly/conversation-application.md b/fa/guides/application-publishing/launch-your-webapp-quickly/conversation-application.md new file mode 100644 index 000000000..a860e6848 --- /dev/null +++ b/fa/guides/application-publishing/launch-your-webapp-quickly/conversation-application.md @@ -0,0 +1,52 @@ +# برنامه کاربردی مکالمه + +برنامه‌های کاربردی مکالمه‌ای، در قالب پرسش و پاسخ، درگیر گفتگوی مداوم با کاربران می‌شوند. این برنامه‌ها از ویژگی‌های زیر پشتیبانی می‌کنند (مطمئن شوید که این توابع در طول ارکستراسیون برنامه فعال هستند): + +* متغیرهایی که قبل از مکالمه پر می‌شوند. +* ایجاد، سنجاق کردن و حذف مکالمات. +* جملات آغازین مکالمه. +* پیشنهادات سوال برای قدم بعدی. +* تبدیل گفتار به متن. +* منابع و انتساب‌ها. + +### متغیرهایی که قبل از مکالمه پر می‌شوند + +اگر در طول ارکستراسیون برنامه، نیاز به پر کردن متغیر را تنظیم کرده‌اید، قبل از ورود به پنجره مکالمه، باید اطلاعات خواسته شده را پر کنید: + +
+ +جزئیات لازم را وارد کنید و برای شروع چت، روی دکمه "شروع مکالمه" کلیک کنید. برای کپی کردن محتوای مکالمه، ماوس را روی پاسخ هوش مصنوعی قرار دهید و "پسندیدن" یا "نپسندیدن" را به عنوان بازخورد ارائه دهید. + +
+ +### ایجاد، سنجاق کردن و حذف مکالمات + +برای شروع یک مکالمه جدید، روی دکمه "مکالمه جدید" کلیک کنید. برای سنجاق یا حذف یک مکالمه، ماوس را روی آن قرار دهید. + +
+ +### آغازگر مکالمه + +اگر ویژگی "آغازگر مکالمه" در صفحه ارکستراسیون برنامه فعال باشد، برنامه کاربردی هوش مصنوعی به طور خودکار اولین خط گفتگو را هنگام ایجاد یک مکالمه جدید آغاز می‌کند. + +
+ +### پیگیری + +اگر ویژگی "پیگیری" در صفحه ارکستراسیون برنامه فعال باشد، سیستم به طور خودکار 3 پیشنهاد سوال مرتبط بعد از مکالمه تولید می‌کند: + +
+ +### تبدیل گفتار به متن + +اگر ویژگی "تبدیل گفتار به متن" در طول ارکستراسیون برنامه فعال باشد، در کادر ورودی برنامه وب، یک آیکون ورودی گفتار خواهید دید. برای تبدیل گفتار به متن، روی آیکون کلیک کنید: + +_لطفاً اطمینان حاصل کنید که محیط دستگاه شما برای استفاده از میکروفون مجاز است._ + +
+ +### منابع و انتساب‌ها + +هنگام آزمایش اثر پایگاه دانش در برنامه، می‌توانید به **فضای کار - افزودن تابع - نقل قول و انتساب** بروید تا ویژگی انتساب نقل قول را فعال کنید. برای راهنمایی‌های دقیق، لطفاً به [نقل قول و انتساب](https://docs.dify.ai/guides/knowledge-base/retrieval-test-and-citation#id-2.-citation-and-attribution) مراجعه کنید. + + diff --git a/fa/guides/application-publishing/launch-your-webapp-quickly/text-generator.md b/fa/guides/application-publishing/launch-your-webapp-quickly/text-generator.md new file mode 100644 index 000000000..c29287a11 --- /dev/null +++ b/fa/guides/application-publishing/launch-your-webapp-quickly/text-generator.md @@ -0,0 +1,57 @@ +# برنامه تولید متن + +برنامه تولید متن برنامه‌ای است که به طور خودکار متن با کیفیت بالا را با توجه به درخواست‌های ارائه شده توسط کاربر تولید می‌کند. این برنامه می‌تواند انواع مختلفی از متن را تولید کند، مانند خلاصه مقالات، ترجمه‌ها و غیره. + +برنامه‌های تولید متن از ویژگی‌های زیر پشتیبانی می‌کنند: + +1. اجرای یک باره. +2. اجرای در دسته‌ها. +3. ذخیره نتایج اجرا. +4. تولید نتایج مشابه بیشتر. + +بیایید آن‌ها را به طور جداگانه معرفی کنیم. + +### اجرای یک باره + +محتوای کوئری را وارد کنید، روی دکمه اجرا کلیک کنید، و نتیجه در سمت راست نمایش داده می‌شود، همانطور که در تصویر زیر نشان داده شده است: + +
+ +در بخش نتایج تولید شده، برای کپی کردن محتوا به کلیپ بورد، روی دکمه "کپی" کلیک کنید. برای ذخیره محتوا، روی دکمه "ذخیره" کلیک کنید. می‌توانید محتوای ذخیره شده را در تب "ذخیره شده" مشاهده کنید. همچنین می‌توانید محتوای تولید شده را "پسند" یا "نپسند" کنید. + +### اجرای در دسته‌ها + +گاهی اوقات، باید یک برنامه را چندین بار اجرا کنیم. به عنوان مثال: یک برنامه وب وجود دارد که می‌تواند مقالات را بر اساس موضوعات تولید کند. اکنون می‌خواهیم 100 مقاله در مورد موضوعات مختلف تولید کنیم. سپس این کار باید 100 بار انجام شود، که بسیار مشکل است. همچنین، باید منتظر اتمام یک کار قبل از شروع کار بعدی باشید. + +در سناریوی فوق، از تابع عملیات دسته استفاده می‌شود، که برای کار کردن راحت است (موضوع را در یک فایل `csv` وارد کنید، فقط یک بار اجرا کنید) و همچنین زمان تولید را ذخیره می‌کند (چندین کار به طور همزمان اجرا می‌شوند). نحوه استفاده به شرح زیر است: + +#### مرحله 1 وارد صفحه اجرای دسته شوید + +روی تب "اجرای دسته" کلیک کنید تا وارد صفحه اجرای دسته شوید. + +
+ +#### مرحله 2 الگو را دانلود کرده و محتوا را پر کنید + +روی دکمه **"الگو را از اینجا دانلود کنید"** کلیک کنید تا فایل الگو را دریافت کنید. فایل را ویرایش کنید و محتوای مورد نیاز را پر کنید، سپس آن را به عنوان یک فایل `.csv` ذخیره کنید. در نهایت، فایل کامل شده را به Dify آپلود کنید. + +#### مرحله 3 فایل را آپلود کرده و اجرا کنید + +
+ +اگر نیاز به صادرات محتوای تولید شده دارید، می‌توانید روی دکمه "دانلود" در گوشه بالا سمت راست کلیک کنید تا به عنوان یک فایل `csv` صادر کنید. + +**توجه:** رمزگذاری فایل `csv` آپلود شده باید `Unicode` باشد. در غیر این صورت، نتیجه با شکست مواجه خواهد شد. راه حل: هنگام صادرات به یک فایل `csv` با Excel، WPS و غیره، `Unicode` را برای رمزگذاری انتخاب کنید. + +### ذخیره نتایج اجرا + +برای ذخیره نتایج اجرا، روی دکمه "ذخیره" در زیر نتایج تولید شده کلیک کنید. در تب "ذخیره شده" می‌توانید تمام محتوای ذخیره شده را مشاهده کنید. + +
+ +### تولید نتایج مشابه بیشتر + +اگر تابع "بیشتر شبیه به این" در صفحه Orchestrate برنامه روشن باشد، با کلیک کردن روی دکمه "بیشتر شبیه به این" در برنامه وب، محتوایی مشابه نتیجه فعلی تولید می‌شود. همانطور که در زیر نشان داده شده است: + +
+ diff --git a/fa/guides/application-publishing/launch-your-webapp-quickly/web-app-settings.md b/fa/guides/application-publishing/launch-your-webapp-quickly/web-app-settings.md new file mode 100644 index 000000000..389cdfef4 --- /dev/null +++ b/fa/guides/application-publishing/launch-your-webapp-quickly/web-app-settings.md @@ -0,0 +1,29 @@ +# مرور کلی + +برنامه‌های وب برای کاربران برنامه طراحی شده‌اند. هنگامی که یک توسعه‌دهنده برنامه، برنامه‌ای را در Dify ایجاد می‌کند، یک برنامه وب متناظر تولید می‌شود. کاربران برنامه وب می‌توانند بدون ورود به سیستم از آن استفاده کنند. برنامه وب برای اندازه‌های مختلف دستگاه سازگار است: PC، تبلت و موبایل. + +محتوای برنامه وب با پیکربندی برنامه منتشر شده هم‌راستا است. هنگامی که پیکربندی برنامه اصلاح شده و دکمه "انتشار" در صفحه هماهنگی اعلان کلیک می‌شود، محتوای برنامه وب با توجه به پیکربندی فعلی برنامه به‌روزرسانی خواهد شد. + +در صفحه مرور کلی برنامه، می‌توانید دسترسی به برنامه وب را فعال یا غیرفعال کنید و اطلاعات سایت برنامه وب را اصلاح کنید، از جمله: + +* آیکون +* نام +* توضیحات برنامه +* زبان رابط +* اطلاعات حق نشر +* پیوند به سیاست حفظ حریم خصوصی + +عملکرد و کارایی برنامه وب به این بستگی دارد که آیا توسعه‌دهنده این ویژگی‌ها را در طول هماهنگی برنامه فعال کرده است یا خیر، مانند: + +* سخنان افتتاحیه مکالمه +* متغیرهایی که قبل از مکالمه پر می‌شوند +* پیشنهادات برای قدم بعدی +* تبدیل گفتار به متن +* مراجع و منابع +* پاسخ‌های مشابه بیشتر (برای برنامه‌های مبتنی بر متن) +* ...... + +در بخش‌های بعدی، دو نوع برنامه وب را معرفی خواهیم کرد: + +* تولید متن +* مکالمه‌ای diff --git a/fa/guides/biao-zhu/README.md b/fa/guides/biao-zhu/README.md new file mode 100644 index 000000000..a12341e37 --- /dev/null +++ b/fa/guides/biao-zhu/README.md @@ -0,0 +1 @@ +# حاشیه‌نویسی diff --git a/fa/guides/biao-zhu/annotation-reply.md b/fa/guides/biao-zhu/annotation-reply.md new file mode 100644 index 000000000..5f44f2ca7 --- /dev/null +++ b/fa/guides/biao-zhu/annotation-reply.md @@ -0,0 +1,84 @@ +# پاسخ به یادداشت‌ها + +قابلیت پاسخ به یادداشت‌ها، پاسخ‌های پرسش و پاسخ با کیفیت بالا را از طریق ویرایش و حاشیه‌نویسی دستی، ارائه می‌دهد. + +سناریوهای قابل اجرا: + +* **پاسخ‌های سفارشی برای فیلدهای خاص:** در سناریوهای خدمات مشتری یا پایگاه دانش برای شرکت‌ها، دولت‌ها و غیره، ارائه دهندگان خدمات ممکن است بخواهند اطمینان حاصل کنند که برخی سؤالات خاص با نتایج قطعی پاسخ داده می‌شوند. بنابراین، سفارشی کردن خروجی برای سؤالات خاص ضروری است. به عنوان مثال، ایجاد "پاسخ‌های استاندارد" برای سؤالات خاص یا علامت گذاری برخی سؤالات به عنوان "غیرقابل پاسخ". +* **تنظیم سریع برای محصولات POC یا DEMO:** هنگام ساخت سریع محصولات نمونه اولیه، پاسخ‌های سفارشی که از طریق پاسخ‌های یادداشت شده به دست می‌آیند، می‌توانند به طور مؤثری تولید مورد انتظار نتایج پرسش و پاسخ را ارتقا دهند و در نتیجه رضایت مشتری را بهبود بخشند. + +قابلیت پاسخ به یادداشت‌ها در واقع مجموعه‌ای دیگر از سیستم‌های تقویت شده با بازیابی را ارائه می‌دهد که به شما امکان می‌دهد مرحله تولید LLM را دور بزنید و از مشکلات هذیان RAG جلوگیری کنید. + +### گردش کار + +1. پس از فعال کردن قابلیت پاسخ به یادداشت‌ها، می‌توانید پاسخ‌های مکالمات LLM را یادداشت کنید. می‌توانید پاسخ‌های با کیفیت بالا از پاسخ‌های LLM را مستقیماً به عنوان یادداشت اضافه کنید یا پاسخ با کیفیت بالا را با توجه به نیاز خود ویرایش کنید. این یادداشت‌های ویرایش شده به طور دائم ذخیره می‌شوند. +2. هنگامی که کاربر دوباره سؤالی مشابه می‌پرسد، سیستم سؤال را وکتور می‌کند و به دنبال سؤالات یادداشت شده مشابه می‌گردد. +3. اگر تطابقی یافت شد، پاسخ مربوطه از یادداشت مستقیماً برگردانده می‌شود و روند LLM یا RAG را دور می‌زند. +4. اگر هیچ تطابقی یافت نشد، سؤال به روند معمولی (عبور به LLM یا RAG) ادامه خواهد داد. +5. هنگامی که قابلیت پاسخ به یادداشت‌ها غیرفعال می‌شود، سیستم دیگر پاسخ‌های از یادداشت‌ها را تطبیق نخواهد داد. + +

گردش کار پاسخ به یادداشت‌ها

+ +### فعال کردن پاسخ به یادداشت‌ها در تنظیمات راهنما + +با مراجعه به "**تنظیمات -> افزودن ویژگی‌ها**" کلید پاسخ به یادداشت‌ها را فعال کنید: + +

فعال کردن پاسخ به یادداشت‌ها در تنظیمات راهنما

+ +هنگام فعال کردن، باید پارامترهای مربوط به پاسخ به یادداشت‌ها را تنظیم کنید که شامل: آستانه امتیاز و مدل توکار. + +**آستانه امتیاز:** این آستانه تشابه را برای تطبیق پاسخ‌های یادداشت شده تنظیم می‌کند. فقط یادداشت‌هایی با امتیاز بالاتر از این آستانه بازیابی می‌شوند. + +**مدل توکار:** این برای وکتور کردن متن یادداشت شده استفاده می‌شود. تغییر مدل، توکارها را دوباره تولید خواهد کرد. + +ذخیره و فعال کردن را کلیک کنید و تنظیمات بلافاصله اعمال می‌شوند. سیستم توکارها را برای همه یادداشت‌های ذخیره شده با استفاده از مدل توکار تولید می‌کند. + +

تنظیم پارامترها برای پاسخ به یادداشت‌ها

+ +### اضافه کردن یادداشت‌ها در صفحه عیب‌یابی مکالمه + +می‌توانید مستقیماً یادداشت‌ها را در اطلاعات پاسخ مدل در صفحات عیب‌یابی و پیش‌نمایش اضافه یا ویرایش کنید. + +

اضافه کردن پاسخ به یادداشت‌ها

+ +پاسخ را به پاسخ با کیفیت بالا مورد نیاز خود ویرایش کنید و آن را ذخیره کنید. + +

ویرایش پاسخ به یادداشت‌ها

+ +سؤال کاربر را دوباره وارد کنید و سیستم از یادداشت ذخیره شده برای پاسخ مستقیم به سؤال کاربر استفاده خواهد کرد. + +

پاسخ به سؤالات کاربران با یادداشت‌های ذخیره شده

+ +### فعال کردن پاسخ به یادداشت‌ها در لاگ‌ها و یادداشت‌ها + +با مراجعه به "**لاگ‌ها و یادداشت‌ها -> یادداشت‌ها**" کلید پاسخ به یادداشت‌ها را فعال کنید: + +

فعال کردن پاسخ به یادداشت‌ها در لاگ‌ها و یادداشت‌ها

+ +### تنظیم پارامترها برای پاسخ به یادداشت‌ها در بک‌اند یادداشت‌ها + +پارامترهایی که می‌توان برای پاسخ به یادداشت‌ها تنظیم کرد شامل: آستانه امتیاز و مدل توکار. + +**آستانه امتیاز:** این آستانه تشابه را برای تطبیق پاسخ‌های یادداشت شده تنظیم می‌کند. فقط یادداشت‌هایی با امتیاز بالاتر از این آستانه بازیابی می‌شوند. + +**مدل توکار:** این برای وکتور کردن متن یادداشت شده استفاده می‌شود. تغییر مدل، توکارها را دوباره تولید خواهد کرد. + +

تنظیم پارامترها برای پاسخ به یادداشت‌ها

+ +### وارد کردن انبوه جفت‌های پرسش و پاسخ یادداشت شده + +در قابلیت وارد کردن انبوه، می‌توانید الگوی وارد کردن یادداشت‌ها را دانلود کنید، جفت‌های پرسش و پاسخ یادداشت شده را مطابق با قالب الگو ویرایش کنید، و سپس آن‌ها را به طور انبوه وارد کنید. + +

وارد کردن انبوه جفت‌های پرسش و پاسخ یادداشت شده

+ +### خروجی انبوه جفت‌های پرسش و پاسخ یادداشت شده + +از طریق قابلیت خروجی انبوه، می‌توانید همه جفت‌های پرسش و پاسخ یادداشت شده ذخیره شده در سیستم را به طور همزمان صادر کنید. + +

خروجی انبوه جفت‌های پرسش و پاسخ یادداشت شده

+ +### مشاهده تاریخچه ضربه به یادداشت + +در قابلیت تاریخچه ضربه به یادداشت، می‌توانید تاریخچه ویرایش همه ضربه‌ها به یادداشت، سؤالات ضربه کاربر، پاسخ‌های پاسخ، منبع ضربه‌ها، امتیاز تشابه تطبیق، زمان ضربه و اطلاعات دیگر را مشاهده کنید. می‌توانید از این اطلاعات برای بهبود مداوم محتوای یادداشت شده خود استفاده کنید. + +

مشاهده تاریخچه ضربه به یادداشت

diff --git a/fa/guides/biao-zhu/logs.md b/fa/guides/biao-zhu/logs.md new file mode 100644 index 000000000..3429f3dec --- /dev/null +++ b/fa/guides/biao-zhu/logs.md @@ -0,0 +1,35 @@ +# لاگ‌ها و حاشیه‌نویسی + +{% hint style="warning" %} +لطفاً مطمئن شوید که برنامه شما هنگام جمع‌آوری داده‌های کاربری از مقررات محلی پیروی می‌کند. روش معمول انتشار سیاست حفظ حریم خصوصی و دریافت رضایت کاربر است. +{% endhint %} + +ویژگی **لاگ‌ها** برای مشاهده و حاشیه‌نویسی عملکرد برنامه‌های Dify طراحی شده است. Dify لاگ‌ها را برای تمام تعاملات با برنامه، چه از طریق وب‌اپ یا API، ضبط می‌کند. اگر مهندس راهنمایی یا اپراتور LLM هستید، این ویژگی تجربه‌ای بصری از عملیات برنامه‌های LLM در اختیار شما قرار می‌دهد. + +### استفاده از کنسول لاگ‌ها + +می‌توانید لاگ‌ها را در ناوبری سمت چپ برنامه پیدا کنید. این صفحه معمولاً موارد زیر را نمایش می‌دهد: + +* سوابق تعامل بین کاربران و هوش مصنوعی در بازه زمانی انتخاب‌شده +* نتایج ورودی کاربر و خروجی هوش مصنوعی، که برای برنامه‌های مکالمه‌ای معمولاً مجموعه‌ای از جریان‌های پیام هستند +* امتیازدهی از طرف کاربران و اپراتورها، و همچنین حاشیه‌نویسی‌های بهبود از طرف اپراتورها + +لاگ‌ها در حال حاضر سوابق تعامل از فرآیند اشکال‌زدایی راهنمایی را شامل نمی‌شوند. + +### حاشیه‌نویسی‌های بهبود + +{% hint style="info" %} +این حاشیه‌نویسی‌ها برای تنظیم دقیق مدل در نسخه‌های آینده Dify به منظور بهبود دقت مدل و سبک پاسخ استفاده خواهند شد. نسخه پیش‌نمایش فعلی فقط از حاشیه‌نویسی‌ها پشتیبانی می‌کند. +{% endhint %} + +

برای بهبود برنامه خود، لاگ‌ها را علامت‌گذاری کنید

+ +با کلیک کردن بر روی یک ورودی لاگ، پنل جزئیات لاگ در سمت راست رابط کاربری باز می‌شود. در این پنل، اپراتورها می‌توانند تعامل را حاشیه‌نویسی کنند: + +* برای پیام‌های با عملکرد خوب، انگشت شست بالا را بدهید. +* برای پیام‌های با عملکرد ضعیف، انگشت شست پایین را بدهید. +* پاسخ‌های بهبودیافته را برای بهبود علامت‌گذاری کنید، که نشان‌دهنده متنی است که انتظار دارید هوش مصنوعی پاسخ دهد. + +لطفاً توجه داشته باشید که اگر چندین مدیر در تیم یک ورودی لاگ را حاشیه‌نویسی کنند، آخرین حاشیه‌نویسی روی موارد قبلی را لغو خواهد کرد. + + diff --git a/fa/guides/extension/README.md b/fa/guides/extension/README.md new file mode 100644 index 000000000..199904c9e --- /dev/null +++ b/fa/guides/extension/README.md @@ -0,0 +1,11 @@ +# توسعه + +در فرآیند ایجاد برنامه‌های هوش مصنوعی، توسعه‌دهندگان با نیازهای متغیر تجاری و چالش‌های پیچیده فنی روبرو هستند. استفاده موثر از قابلیت‌های توسعه نه تنها می‌تواند انعطاف‌پذیری و عملکرد برنامه‌ها را افزایش دهد، بلکه امنیت و انطباق داده‌های سازمانی را نیز تضمین می‌کند. Dify دو روش توسعه زیر را ارائه می‌دهد: + +{% content-ref url="api-based-extension/" %} +[توسعه مبتنی بر API](api-based-extension/) +{% endcontent-ref %} + +{% content-ref url="code-based-extension/" %} +[توسعه مبتنی بر کد](code-based-extension/) +{% endcontent-ref %} diff --git a/fa/guides/extension/api-based-extension/README.md b/fa/guides/extension/api-based-extension/README.md new file mode 100644 index 000000000..a29812fff --- /dev/null +++ b/fa/guides/extension/api-based-extension/README.md @@ -0,0 +1,268 @@ +# توسعه‌ی افزونه مبتنی بر API + +توسعه‌دهندگان می‌توانند با استفاده از ماژول توسعه‌ی API، قابلیت‌های ماژول‌ها را گسترش دهند. در حال حاضر، توسعه‌ی ماژول‌ها در این افزونه‌ها پشتیبانی می‌شود: + +* `moderation` +* `external_data_tool` + +قبل از توسعه‌ی قابلیت‌های ماژول، یک API و کلید API برای احراز هویت آماده کنید. این دو مورد نیز می‌توانند به طور خودکار توسط Dify تولید شوند. علاوه بر توسعه‌ی قابلیت‌های مربوطه در ماژول، دستورالعمل‌های زیر را دنبال کنید تا Dify بتواند به درستی با API شما ارتباط برقرار کند. + +

اضافه کردن توسعه‌ی API

+ +## مشخصات API + +Dify API شما را طبق مشخصات زیر فراخوانی خواهد کرد: + +``` +POST {Your-API-Endpoint} +``` + +### هدر + +| هدر | مقدار | توضیحات | +| --------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `Content-Type` | application/json | محتوا درخواست به صورت JSON است. | +| `Authorization` | Bearer {api\_key} | کلید API به عنوان یک توکن ارسال می‌شود. شما باید `api_key` را تحلیل کنید و در صورت تطابق با کلید API ارائه شده، امنیت API را تضمین کنید. | + +### بدنه‌ی درخواست + +```JSON +{ + "point": string, // نقطه توسعه، ماژول‌های مختلف ممکن است نقاط توسعه‌ی متعدد داشته باشند + "params": { + ... // پارامترهایی که به هر نقطه توسعه‌ی ماژول ارسال می‌شوند + } +} +``` + +### پاسخ API + +```JSON +{ + ... // برای محتوایی که توسط API برگردانده می‌شود، به مشخصات طراحی ماژول خاص برای نقاط توسعه‌ی مختلف مراجعه کنید. +} + +``` + +## بررسی + +هنگامی که توسعه‌ی API را در Dify پیکربندی می‌کنید، Dify یک درخواست به API Endpoint ارسال می‌کند تا در دسترس بودن API را بررسی کند. هنگام دریافت `point=ping` توسط API Endpoint، API باید `result=pong` را به شرح زیر برگرداند: + +### هدر + +```JSON +Content-Type: application/json +Authorization: Bearer {api_key} +``` + +### بدنه‌ی درخواست + +```JSON +{ + "point": "ping" +} +``` + +### پاسخ API مورد انتظار + +```JSON +{ + "result": "pong" +} +``` + +\\ + +## به عنوان مثال + +در اینجا از ابزار داده‌های خارجی به عنوان نمونه استفاده می‌کنیم، جایی که سناریو، بازیابی اطلاعات آب و هوایی خارجی بر اساس منطقه به عنوان متن است. + +### مشخصات API + +`POST https://fake-domain.com/api/dify/receive` + +### **هدر** + +```JSON +Content-Type: application/json +Authorization: Bearer 123456 +``` + +### **بدنه‌ی درخواست** + +```JSON +{ + "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** + +```JSON +{ + "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 است. + +#### **نصب وابستگی‌ها.** + +
pip install 'fastapi[all]' uvicorn
+
+ +#### کد را مطابق با مشخصات رابط بنویسید. + +
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)):
+    """
+    دریافت داده‌های پرس و جو API از Dify.
+    """
+    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
+
+    # for debug
+    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")
+
+    # for debug
+    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"}
+
+ +#### راه‌اندازی سرویس API. + +پورت پیش‌فرض 8000 است. آدرس کامل API: `http://127.0.0.1:8000/api/dify/receive` با کلید API پیکربندی شده "123456" است. + +
uvicorn main:app --reload --host 0.0.0.0
+
+ +#### این API را در Dify پیکربندی کنید. + +
+ +#### این توسعه‌ی API را در App انتخاب کنید. + +
+ +هنگام اشکال‌زدایی App، Dify درخواست API پیکربندی شده را ارسال می‌کند و محتوای زیر (مثال) را ارسال می‌کند: + +```JSON +{ + "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: + +```JSON +{ + "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 شبکه داخلی دسترسی داشته باشد، می‌توانید از Ngrok برای نمایش عمومی آدرس انتهای سرویس API محلی خود برای اشکال‌زدایی کد محلی مبتنی بر ابر استفاده کنید. مراحل به شرح زیر است: + +1. به وب سایت رسمی Ngrok به آدرس [https://ngrok.com](https://ngrok.com/) مراجعه کنید، ثبت نام کنید و فایل Ngrok را دانلود کنید. + +
+ +2. پس از دانلود، به دایرکتوری دانلود بروید. فایل فشرده را از حالت فشرده خارج کنید و مطابق دستورالعمل، اسکریپت راه‌اندازی را اجرا کنید: + +``` +$ unzip /path/to/ngrok.zip +$ ./ngrok config add-authtoken 你的Token +``` + +3. پورت سرویس API محلی خود را بررسی کنید. + +
+ +دستور زیر را برای شروع اجرا کنید: + +``` +$ ./ngrok http [port number] +``` + +پس از راه‌اندازی موفقیت‌آمیز، چیزی شبیه به این را خواهید دید: + +
+ +4. آدرس "Forwarding" را پیدا کنید، مانند نمونه دامنه `https://177e-159-223-41-52.ngrok-free.app` و آن را به عنوان دامنه عمومی خود استفاده کنید. + +* به عنوان مثال، برای نمایش سرویس در حال اجرا در سیستم محلی خود، URL نمونه `http://127.0.0.1:8000/api/dify/receive` را با `https://177e-159-223-41-52.ngrok-free.app/api/dify/receive` جایگزین کنید. + +اکنون این API Endpoint به طور عمومی در دسترس است. می‌توانید این Endpoint را برای اشکال‌زدایی محلی در Dify پیکربندی کنید. برای مراحل پیکربندی، به مستندات یا راهنمای مربوطه مراجعه کنید. + +### استقرار توسعه‌ی API با Cloudflare Workers + +ما توصیه می‌کنیم که از Cloudflare Workers برای استقرار توسعه‌ی API خود استفاده کنید، زیرا Cloudflare Workers می‌تواند به راحتی یک آدرس عمومی ارائه دهد و می‌تواند به صورت رایگان استفاده شود. + +[cloudflare-workers.md](cloudflare-workers.md "mention") + + diff --git a/fa/guides/extension/api-based-extension/cloudflare-workers.md b/fa/guides/extension/api-based-extension/cloudflare-workers.md new file mode 100644 index 000000000..c6b2cb582 --- /dev/null +++ b/fa/guides/extension/api-based-extension/cloudflare-workers.md @@ -0,0 +1,101 @@ +# با ابزارهای API با Cloudflare Workers مستقر شوید + +## شروع + +از آنجا که Dify API Extension به یک آدرس اینترنتی عمومی به عنوان API Endpoint نیاز دارد، باید API Extension خود را در یک آدرس اینترنتی عمومی مستقر کنیم. در اینجا، ما از Cloudflare Workers برای استقرار API Extension خود استفاده می‌کنیم. + +ما [Example GitHub Repository](https://github.com/crazywoola/dify-extension-workers) را کپی می‌کنیم، که شامل یک API Extension ساده است. ما می‌توانیم آن را به عنوان یک پایه تغییر دهیم. + +```bash +git clone https://github.com/crazywoola/dify-extension-workers.git +cp wrangler.toml.example wrangler.toml +``` + +فایل `wrangler.toml` را باز کنید و `name` و `compatibility_date` را به نام برنامه و تاریخ سازگاری خود تغییر دهید. + +یک پیکربندی مهم در اینجا `TOKEN` در `vars` است که هنگام افزودن API Extension در Dify باید آن را ارائه دهید. به دلایل امنیتی، استفاده از یک رشته تصادفی به عنوان Token توصیه می‌شود. شما نباید Token را به طور مستقیم در کد منبع بنویسید، بلکه آن را از طریق متغیرهای محیطی منتقل کنید. بنابراین، wrangler.toml خود را در مخزن کد خود متعهد نکنید. + +```toml +name = "dify-extension-example" +compatibility_date = "2023-01-01" + +[vars] +TOKEN = "bananaiscool" +``` + +این API Extension یک نقل قول تصادفی از Breaking Bad را برمی‌گرداند. می‌توانید منطق این API Extension را در `src/index.ts` تغییر دهید. این مثال نحوه تعامل با یک API شخص ثالث را نشان می‌دهد. + +```typescript +// ⬇️ منطق خود را در اینجا پیاده سازی کنید ⬇️ +// 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()) +// ⬆️ منطق خود را در اینجا پیاده سازی کنید ⬆️ +``` + +این مخزن همه تنظیمات به جز منطق تجاری را ساده می‌کند. می‌توانید به طور مستقیم از دستورات `npm` برای استقرار API Extension خود استفاده کنید. + +```bash +npm run deploy +``` + +پس از استقرار موفقیت‌آمیز، یک آدرس اینترنتی عمومی دریافت خواهید کرد که می‌توانید آن را در Dify به عنوان یک API Endpoint اضافه کنید. لطفاً توجه داشته باشید که مسیر `endpoint` را از دست ندهید. + +

افزودن API Endpoint در Dify

+ +

افزودن API Tool در صفحه ویرایش برنامه

+ +## سایر منطق TL;DR + +### درباره Bearer Auth + +```typescript +import { bearerAuth } from "hono/bearer-auth"; + +(c, next) => { + const auth = bearerAuth({ token: c.env.TOKEN }); + return auth(c, next); +}, +``` + +منطق احراز هویت Bearer ما به شرح بالا است. ما از بسته `hono/bearer-auth` برای احراز هویت Bearer استفاده می‌کنیم. می‌توانید از `c.env.TOKEN` در `src/index.ts` برای دریافت 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' را به دو مقدار خاص محدود می‌کند + params: z + .object({ + app_id: z.string().optional(), + tool_variable: z.string().optional(), + inputs: z.record(z.any()).optional(), + query: z.any().optional(), // string or null + }) + .optional(), +}); +``` + +ما از `zod` برای تعریف انواع پارامترها استفاده می‌کنیم. می‌توانید از `zValidator` در `src/index.ts` برای اعتبارسنجی پارامترها استفاده کنید. پارامترهای معتبر را از طریق `const { point, params } = c.req.valid("json");` دریافت کنید. `point` ما فقط دو مقدار دارد، بنابراین از `z.union` برای تعریف استفاده می‌کنیم. `params` یک پارامتر اختیاری است که با `z.optional` تعریف شده است. این پارامتر شامل یک پارامتر `inputs` است، یک نوع `Record` که یک شی با کلیدهای رشته‌ای و هر نوع ارزش را نشان می‌دهد. این نوع می‌تواند هر نوع شی را نشان دهد. می‌توانید پارامتر `count` را در `src/index.ts` با استفاده از `params?.inputs?.count` دریافت کنید. + +### دسترسی به Log های Cloudflare Workers + +```bash +wrangler tail +``` + +## محتوای مرجع + +* [Cloudflare Workers](https://workers.cloudflare.com/) +* [Cloudflare Workers CLI](https://developers.cloudflare.com/workers/cli-wrangler/install-update) +* [Example GitHub Repository](https://github.com/crazywoola/dify-extension-workers) + + diff --git a/fa/guides/extension/api-based-extension/external-data-tool.md b/fa/guides/extension/api-based-extension/external-data-tool.md new file mode 100644 index 000000000..fdddee202 --- /dev/null +++ b/fa/guides/extension/api-based-extension/external-data-tool.md @@ -0,0 +1,193 @@ +# ابزارهای داده خارجی + +ابزارهای داده خارجی برای بازیابی داده‌های اضافی از منابع خارجی پس از ارسال داده توسط کاربر نهایی استفاده می‌شوند و سپس این داده‌ها را به عنوان اطلاعات زمینه اضافی برای LLM جمع‌آوری می‌کنند. Dify یک ابزار پیش‌فرض برای تماس با APIهای خارجی ارائه می‌دهد، برای جزئیات به [ابزار داده خارجی](https://docs.dify.ai/guides/knowledge-base/external-data-tool) مراجعه کنید. + +برای توسعه‌دهندگانی که Dify را به صورت محلی مستقر می‌کنند، برای برآورده کردن نیازهای سفارشی‌تر یا اجتناب از توسعه سرور API اضافی، می‌توانید مستقیماً منطق ابزار داده خارجی سفارشی را به صورت افزونه بر اساس سرویس Dify قرار دهید. پس از گسترش ابزارهای سفارشی، گزینه‌های ابزار سفارشی شما به لیست کشویی انواع ابزار اضافه می‌شود و اعضای تیم می‌توانند از این ابزارهای سفارشی برای بازیابی داده‌های خارجی استفاده کنند. + +## راهنمای سریع + +در اینجا مثالی از گسترش یک ابزار داده خارجی برای `جستجوی آب و هوا` با مراحل زیر آورده شده است: + +1. ایجاد پوشه +2. اضافه کردن مشخصات فرم سمت کلاینت +3. اضافه کردن کلاس پیاده‌سازی +4. پیش‌نمایش رابط سمت کلاینت +5. رفع اشکال افزونه + +### 1. **ایجاد پوشه** + +برای اضافه کردن یک نوع سفارشی `جستجوی آب و هوا`، باید پوشه و فایل‌های مربوطه را در `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): + """ + نام نوع سفارشی باید منحصر به فرد باشد، با نام پوشه و فایل مطابقت داشته باشد. + """ + name: str = "weather_search" + + @classmethod + def validate_config(cls, tenant_id: str, config: dict) -> None: + """ + اعتبارسنجی schema.json. این تابع هنگام ذخیره پیکربندی توسط کاربر فراخوانی می‌شود. + + مثال: + .. code-block:: python + config = { + "temperature_unit": "centigrade" + } + + :param tenant_id: شناسه فضای کاری + :param config: متغیرهای پیکربندی فرم + :return: + """ + + if not config.get('temperature_unit'): + raise ValueError('واحد دما الزامی است') + + def query(self, inputs: dict, query: Optional[str] = None) -> str: + """ + پرس و جو از ابزار داده خارجی. + + :param inputs: ورودی‌های کاربر + :param query: پرس و جوی برنامه چت + :return: نتیجه پرس و جوی ابزار + """ + city = inputs.get('city') + temperature_unit = self.config.get('temperature_unit') + + if temperature_unit == 'fahrenheit': + return f'آب و هوا در {city} 32°F است' + else: + return f'آب و هوا در {city} 0°C است' +``` + + + +### 4. **رفع اشکال افزونه** + +اکنون، می‌توانید نوع افزونه ابزار داده خارجی سفارشی `جستجوی آب و هوا` را در رابط هماهنگی برنامه Dify برای اشکال‌زدایی انتخاب کنید. + +## قالب کلاس پیاده‌سازی + +```python +from typing import Optional + +from core.external_data_tool.base import ExternalDataTool + + +class WeatherSearch(ExternalDataTool): + """ + نام نوع سفارشی باید منحصر به فرد باشد، با نام پوشه و فایل مطابقت داشته باشد. + """ + name: str = "weather_search" + + @classmethod + def validate_config(cls, tenant_id: str, config: dict) -> None: + """ + اعتبارسنجی schema.json. این تابع هنگام ذخیره پیکربندی توسط کاربر فراخوانی می‌شود. + + :param tenant_id: شناسه فضای کاری + :param config: متغیرهای پیکربندی فرم + :return: + """ + + # منطق خود را در اینجا پیاده‌سازی کنید + + def query(self, inputs: dict, query: Optional[str] = None) -> str: + """ + پرس و جو از ابزار داده خارجی. + + :param inputs: ورودی‌های کاربر + :param query: پرس و جوی برنامه چت + :return: نتیجه پرس و جوی ابزار + """ + + # منطق خود را در اینجا پیاده‌سازی کنید + return "داده‌های خودتان." +``` + +### معرفی مفصل توسعه کلاس پیاده‌سازی + +### def validate_config + +روش اعتبارسنجی فرم `schema.json`، هنگام کلیک کاربر بر روی "انتشار" برای ذخیره پیکربندی فراخوانی می‌شود. + +* `config`: پارامترهای فرم + * `{{variable}}`: متغیرهای فرم سفارشی + +### def query + +پیاده‌سازی پرس و جوی داده تعریف شده توسط کاربر، نتیجه برگردانده شده به متغیر مشخص شده جایگزین می‌شود. + +* `inputs`: متغیرهای منتقل شده توسط کاربر نهایی +* `query`: محتوای فعلی ورودی مکالمه از کاربر نهایی، یک پارامتر ثابت برای برنامه‌های مکالمه‌ای. diff --git a/fa/guides/extension/api-based-extension/moderation-extension.md b/fa/guides/extension/api-based-extension/moderation-extension.md new file mode 100644 index 000000000..7d71dfcd7 --- /dev/null +++ b/fa/guides/extension/api-based-extension/moderation-extension.md @@ -0,0 +1,150 @@ +# اعتدال + +این ماژول برای بررسی محتوای ورودی از سوی کاربران نهایی و خروجی از LLM ها در برنامه استفاده می شود که به دو نوع نقطه توسعه تقسیم می شود. + +لطفاً [.](./ "mention") را برای تکمیل توسعه و ادغام قابلیت های اولیه خدمات API بخوانید. + +## نقطه توسعه + +`app.moderation.input`: نقطه توسعه بررسی محتوای ورودی کاربر نهایی. برای بررسی محتوای متغیرهای ارسال شده توسط کاربران نهایی و محتوای ورودی گفتگوها در برنامه های مکالمه ای استفاده می شود. + +`app.moderation.output`: نقطه توسعه بررسی محتوای خروجی LLM. برای بررسی محتوای خروجی LLM استفاده می شود. هنگامی که خروجی LLM در حال جریان است، محتوا به صورت تکه های 100 کاراکتری توسط API درخواست می شود تا از تأخیر در بررسی هنگام طولانی بودن محتوای خروجی جلوگیری شود. + +### `app.moderation.input` + +#### بدنه درخواست + +```json +{ + "point": "app.moderation.input", + "app_id": string, + "inputs": { + "var_1": "value_1", + "var_2": "value_2", + ... + }, + "query": string | null + } +} +``` + +* مثال + +```json +{ + "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 + +```json +{ + "flagged": bool, + "action": string, + "preset_response": string, + "inputs": { + "var_1": "value_1", + "var_2": "value_2", + ... + }, + "query": string | null +} +``` + +* مثال + +`action=direct_output` + +```json +{ + "flagged": true, + "action": "direct_output", + "preset_response": "Your content violates our usage policy." +} +``` + +`action=overridden` + +``` +{ + "flagged": true, + "action": "overridden", + "inputs": { + "var_1": "I will *** you.", + "var_2": "I will *** you." + }, + "query": "Happy everydays." +} +``` + +### `app.moderation.output` + +#### بدنه درخواست + +```JSON +{ + "point": "app.moderation.output", + "params": { + "app_id": string, + "text": string + } +} +``` + +* مثال + + + + ```JSON + { + "point": "app.moderation.output", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "text": "I will kill you." + } + } + ``` + +#### پاسخ API + +```JSON +{ + "flagged": bool, + "action": string, + "preset_response": string, + "text": string +``` + +* مثال + +`action=direct_output` + +* ```JSON + { + "flagged": true, + "action": "direct_output", + "preset_response": "Your content violates our usage policy." + } + ``` + +`action=overridden` + +* ```JSON + { + "flagged": true, + "action": "overridden", + "text": "I will *** you." + } + ``` + + + diff --git a/fa/guides/extension/api-based-extension/moderation.md b/fa/guides/extension/api-based-extension/moderation.md new file mode 100644 index 000000000..71635537a --- /dev/null +++ b/fa/guides/extension/api-based-extension/moderation.md @@ -0,0 +1,137 @@ +# کنترل محتواي حساس + +این ماژول برای بررسی محتوای ورودی توسط کاربران نهایی و محتوای خروجی LLM در برنامه استفاده می شود. این ماژول به دو نوع نقطه گسترش تقسیم می شود. + +### نقاط گسترش + +* `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, // شناسه برنامه + "inputs": { // مقادیر متغیر ارسال شده توسط کاربران نهایی، کلید نام متغیر است، مقدار مقدار متغیر است + "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": "من تو را می کشم.", + "var_2": "من تو را می کنم." + }, + "query": "روزهای خوش." + } + } + ``` + +#### پاسخ API + +``` +{ + "flagged": bool, // آیا قوانین اعتدال را نقض می کند + "action": string, // عملی که باید انجام شود، direct_output برای خروجی مستقیم یک پاسخ از پیش تعیین شده؛ overridden برای لغو مقادیر متغیر ورودی + "preset_response": string, // پاسخ از پیش تعیین شده (فقط هنگام action=direct_output برگردانده می شود) + "inputs": { // مقادیر متغیر ارسال شده توسط کاربران نهایی، کلید نام متغیر است، مقدار مقدار متغیر است (فقط هنگام action=overridden برگردانده می شود) + "var_1": "value_1", + "var_2": "value_2", + ... + }, + "query": string | null // محتوای ورودی گفتگوی فعلی کاربر نهایی که لغو شده است، پارامتر ثابت برای برنامه های گفتگو است. (فقط هنگام action=overridden برگردانده می شود) +} +``` + +* مثال + * `action=direct_output` + * ``` + { + "flagged": true, + "action": "direct_output", + "preset_response": "محتوای شما خط مشی استفاده ما را نقض می کند." + } + ``` + * `action=overridden` + * ``` + { + "flagged": true, + "action": "overridden", + "inputs": { + "var_1": "من تو را *** می کنم.", + "var_2": "من تو را *** می کنم." + }, + "query": "روزهای خوش." + } + ``` + +### نقطه گسترش `app.moderation.output` + +#### بدنه درخواست + +``` +{ + "point": "app.moderation.output", // نوع نقطه گسترش، در اینجا به عنوان app.moderation.output ثابت است + "params": { + "app_id": string, // شناسه برنامه + "text": string // محتوای پاسخ LLM. هنگامی که خروجی LLM به صورت جریان است، این محتوا به بلوک های 100 کاراکتری تقسیم می شود. + } +} +``` + +* مثال + * ``` + { + "point": "app.moderation.output", + "params": { + "app_id": "61248ab4-1125-45be-ae32-0ce91334d021", + "text": "من تو را می کشم." + } + } + ``` + +#### پاسخ API + +``` +{ + "flagged": bool, // آیا قوانین اعتدال را نقض می کند + "action": string, // عملی که باید انجام شود، direct_output برای خروجی مستقیم یک پاسخ از پیش تعیین شده؛ overridden برای لغو مقادیر متغیر ورودی + "preset_response": string, // پاسخ از پیش تعیین شده (فقط هنگام action=direct_output برگردانده می شود) + "text": string // محتوای پاسخ LLM که لغو شده است (فقط هنگام action=overridden برگردانده می شود) +} +``` + +* مثال + * `action=direct_output` + * ``` + { + "flagged": true, + "action": "direct_output", + "preset_response": "محتوای شما خط مشی استفاده ما را نقض می کند." + } + ``` + * `action=overridden` + * ``` + { + "flagged": true, + "action": "overridden", + "text": "من تو را *** می کنم." + } + ``` diff --git a/fa/guides/extension/code-based-extension/README.md b/fa/guides/extension/code-based-extension/README.md new file mode 100644 index 000000000..79b453a5d --- /dev/null +++ b/fa/guides/extension/code-based-extension/README.md @@ -0,0 +1,98 @@ +# افزونه‌های مبتنی بر کد + +برای توسعه‌دهندگانی که Dify را به صورت محلی مستقر می‌کنند، اگر می‌خواهید قابلیت‌های افزونه را بدون بازنویسی سرویس API پیاده‌سازی کنید، می‌توانید از افزونه‌های کد استفاده کنید. این امکان به شما اجازه می‌دهد تا قابلیت‌های برنامه را به شکل کد (مثلا قابلیت پلاگین) گسترش یا ارتقا دهید، بدون اینکه منطق اصلی کد Dify را مختل کنید. این افزونه‌ها از رابط‌ها یا مشخصات خاصی پیروی می‌کنند تا سازگاری و قابلیت اتصال و استفاده آسان را با برنامه اصلی تضمین کنند. در حال حاضر، Dify دو نوع افزونه کد ارائه می‌دهد: + +* اضافه کردن نوع جدیدی از ابزار داده خارجی [ابزار داده خارجی](https://docs.dify.ai/guides/extension/api-based-extension/external-data-tool) +* گسترش استراتژی‌های تعدیل محتوای حساس [تعدیل](https://docs.dify.ai/guides/extension/api-based-extension/moderation) + +با توجه به قابلیت‌های بالا، می‌توانید با پیروی از مشخصات رابطه‌ سطح کد، گسترش افقی را انجام دهید. اگر تمایل دارید افزونه‌های خود را به ما ارائه دهید، از ارسال PR به 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" + } + ] +} +``` diff --git a/fa/guides/extension/code-based-extension/external-data-tool.md b/fa/guides/extension/code-based-extension/external-data-tool.md new file mode 100644 index 000000000..cf19ffabe --- /dev/null +++ b/fa/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 وارد کنید. پس از گسترش ابزارهای سفارشی، گزینه‌های ابزار سفارشی شما به لیست کشویی انواع ابزار اضافه می‌شوند و اعضای تیم می‌توانند از این ابزارهای سفارشی برای بازیابی داده‌های خارجی استفاده کنند. + +## راهنماي سریع + +در اینجا مثالی از گسترش ابزار داده خارجی برای `Weather Search` با مراحل زیر آورده شده است: + +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): + """ + نام نوع سفارشی باید منحصر به فرد باشد، با نام دایرکتوری و فایل یکسان باشد. + """ + name: str = "weather_search" + + @classmethod + def validate_config(cls, tenant_id: str, config: dict) -> None: + """ + اعتبارسنجی schema.json. این هنگام ذخیره پیکربندی توسط کاربر فراخوانی می‌شود. + + مثال: + .. code-block:: python + config = { + "temperature_unit": "centigrade" + } + + :param tenant_id: شناسه فضای کار + :param config: متغیرهای پیکربندی فرم + :return: + """ + + if not config.get('temperature_unit'): + raise ValueError('temperature unit is required') + + def query(self, inputs: dict, query: Optional[str] = None) -> str: + """ + پرس و جو از ابزار داده خارجی. + + :param inputs: ورودی‌های کاربر + :param query: پرس و جوی برنامه گفتگو + :return: نتیجه پرس و جوی ابزار + """ + 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. **اشکال‌زدایی پسوند** + +اکنون می‌توانید نوع پسوند ابزار داده خارجی سفارشی `Weather Search` را در رابط ارکستراسیون برنامه Dify برای اشکال‌زدایی انتخاب کنید. + +## الگوی کلاس پیاده‌سازی + +```python +from typing import Optional + +from core.external_data_tool.base import ExternalDataTool + + +class WeatherSearch(ExternalDataTool): + """ + نام نوع سفارشی باید منحصر به فرد باشد، با نام دایرکتوری و فایل یکسان باشد. + """ + name: str = "weather_search" + + @classmethod + def validate_config(cls, tenant_id: str, config: dict) -> None: + """ + اعتبارسنجی schema.json. این هنگام ذخیره پیکربندی توسط کاربر فراخوانی می‌شود. + + :param tenant_id: شناسه فضای کار + :param config: متغیرهای پیکربندی فرم + :return: + """ + + # منطق خودتان را در اینجا پیاده‌سازی کنید + + def query(self, inputs: dict, query: Optional[str] = None) -> str: + """ + پرس و جو از ابزار داده خارجی. + + :param inputs: ورودی‌های کاربر + :param query: پرس و جوی برنامه گفتگو + :return: نتیجه پرس و جوی ابزار + """ + + # منطق خودتان را در اینجا پیاده‌سازی کنید + return "data you own." +``` + +### معرفی مفصل توسعه کلاس پیاده‌سازی + +### def validate_config + +روش اعتبارسنجی فرم `schema.json`، که هنگام کلیک کاربر روی "Publish" برای ذخیره پیکربندی فراخوانی می‌شود. + +* `config` پارامترهای فرم + * `{{variable}}` متغیرهای فرم سفارشی + +### def query + +پیاده‌سازی پرس و جوی داده‌های تعریف‌شده توسط کاربر، نتیجه برگردانده شده به متغیر مشخص شده جایگزین می‌شود. + +* `inputs`: متغیرهایی که توسط کاربر نهایی منتقل می‌شوند +* `query`: محتوای ورودی مکالمه فعلی از کاربر نهایی، یک پارامتر ثابت برای برنامه‌های مکالمه‌ای. diff --git a/fa/guides/extension/code-based-extension/moderation.md b/fa/guides/extension/code-based-extension/moderation.md new file mode 100644 index 000000000..efe1b4569 --- /dev/null +++ b/fa/guides/extension/code-based-extension/moderation.md @@ -0,0 +1,315 @@ +# مدریت محتوای حساس + +علاوه بر انواع مدریت محتوای داخلی سیستم، Dify از قوانین مدریت محتوای تعریف شده توسط کاربر نیز پشتیبانی می‌کند. این روش برای توسعه‌دهندگانی که استقرار شخصی خود را سفارشی می‌کنند مناسب است. به عنوان مثال، در یک راه‌اندازی سرویس مشتری داخلی شرکتی، ممکن است لازم باشد که کاربران هنگام پرس و جو یا نمایندگان سرویس مشتری هنگام پاسخ، نه تنها از وارد کردن کلماتی مربوط به خشونت، سکس و فعالیت‌های غیرقانونی خودداری کنند، بلکه از اصطلاحات خاصی که توسط شرکت ممنوع شده‌اند یا منطق مدریت داخلی را نقض می‌کنند، دوری کنند. توسعه‌دهندگان می‌توانند قوانین مدریت محتوای سفارشی را در سطح کد در یک استقرار خصوصی Dify توسعه دهند. + +## راهنمای سریع + +در اینجا مثالی از توسعه نوع مدریت محتوای `Cloud Service` با مراحل زیر آورده شده است: + +1. ایجاد دایرکتوری +2. افزودن فایل تعریف کامپوننت فرانت‌اند +3. افزودن کلاس پیاده‌سازی +4. پیش‌نمایش رابط فرانت‌اند +5. اشکال‌زدایی افزونه + +### 1. ایجاد دایرکتوری + +برای افزودن نوع سفارشی `Cloud Service`، دایرکتوری‌ها و فایل‌های مربوطه را در دایرکتوری `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": "亚马逊" + }, + "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" + } + ] +} +``` + +### 3. افزودن کلاس پیاده‌سازی + +قالب کد `cloud_service.py` که می‌توانید منطق تجاری خاص خود را پیاده‌سازی کنید. + +{% hint style="warning" %} +توجه داشته باشید که نام متغیر کلاس باید با نام نوع سفارشی مطابقت داشته باشد، مطابق با نام دایرکتوری و فایل و باید منحصر به فرد باشد. +{% 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 saves 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.overridden, 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.overridden, 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. اشکال‌زدایی افزونه + +در این مرحله، می‌توانید نوع توسعه مدریت محتوای سفارشی `Cloud Service` را برای اشکال‌زدایی در رابط برنامه‌نویسی Dify انتخاب کنید. + +## قالب کلاس پیاده‌سازی + +```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 saves the config. + + :param tenant_id: the id of workspace + :param config: the variables of form config + :return: + """ + cls._validate_inputs_and_outputs_config(config, True) + + # implement your own logic here + + 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 = "" + + # implement your own logic here + + # return ModerationInputsResult(flagged=flagged, action=ModerationAction.overridden, 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 = "" + + # implement your own logic here + + # return ModerationOutputsResult(flagged=flagged, action=ModerationAction.overridden, text=text) + return ModerationOutputsResult(flagged=flagged, action=ModerationAction.DIRECT_OUTPUT, preset_response=preset_response) +``` + +## معرفی دقیق توسعه کلاس پیاده‌سازی + +### def validate\_config + +روش اعتبارسنجی فرم `schema.json` هنگامی که کاربر روی "انتشار" برای ذخیره پیکربندی کلیک می‌کند، فراخوانی می‌شود. + +* پارامترهای فرم `config` + * `{{variable}}` متغیر سفارشی فرم + * `inputs_config` پاسخ پیش‌فرض مدریت ورودی + * `enabled` فعال بودن یا نبودن + * `preset_response` پاسخ پیش‌فرض ورودی + * `outputs_config` پاسخ پیش‌فرض مدریت خروجی + * `enabled` فعال بودن یا نبودن + * `preset_response` پاسخ پیش‌فرض خروجی + +### def moderation\_for\_inputs + +عملکرد اعتبارسنجی ورودی + +* `inputs`: ارزشی که توسط کاربر نهایی ارسال می‌شود. +* `query`: محتوای ورودی فعلی کاربر نهایی در مکالمه، یک پارامتر ثابت برای برنامه‌های مکالمه‌ای. +* `ModerationInputsResult` + * `flagged`: آیا قوانین مدریت را نقض می‌کند؟ + * `action`: عملکردی که باید انجام شود + * `direct_output`: مستقیم خروجی پاسخ پیش‌فرض + * `overridden`: غیرفعال کردن مقادیر متغیرهای ارسال شده + * `preset_response`: پاسخ پیش‌فرض (فقط در صورت `action=direct_output` بازگردانده می‌شود) + * `inputs`: ارزشی که توسط کاربر نهایی ارسال می‌شود، با کلید به عنوان نام متغیر و مقدار به عنوان مقدار متغیر (فقط در صورت `action=overridden` بازگردانده می‌شود) + * `query`: محتوای ورودی فعلی کاربر نهایی در مکالمه، یک پارامتر ثابت برای برنامه‌های مکالمه‌ای (فقط در صورت `action=overridden` بازگردانده می‌شود) + +### def moderation\_for\_outputs + +عملکرد اعتبارسنجی خروجی + +* `text`: محتوای خروجی مدل +* `moderation_for_outputs`: عملکرد اعتبارسنجی خروجی + * `text`: محتوای پاسخ LLM. هنگامی که خروجی LLM به صورت قطعه قطعه ارسال می‌شود، این محتوا در بخش‌های 100 کاراکتری است. + * `ModerationOutputsResult` + * `flagged`: آیا قوانین مدریت را نقض می‌کند؟ + * `action`: عملکردی که باید انجام شود + * `direct_output`: مستقیم خروجی پاسخ پیش‌فرض + * `overridden`: غیرفعال کردن مقادیر متغیرهای ارسال شده + * `preset_response`: پاسخ پیش‌فرض (فقط در صورت `action=direct_output` بازگردانده می‌شود) + * `text`: محتوای غیراctive شده پاسخ LLM (فقط در صورت `action=overridden` بازگردانده می‌شود). + diff --git a/fa/guides/knowledge-base/README.md b/fa/guides/knowledge-base/README.md new file mode 100644 index 000000000..5df7d3246 --- /dev/null +++ b/fa/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، اکسل، و غیره) + +علاوه بر این، ما به تدریج از همگام‌سازی داده‌ها از منابع مختلف داده به مجموعه‌های داده، از جمله: + +* صفحات وب +* Notion +* Github +* پایگاه داده‌ها +* …… + +{% hint style="info" %} +**سناریو**: اگر شرکت شما می‌خواهد یک دستیار خدمات مشتری AI را بر اساس پایگاه دانش و مستندات محصول موجود ایجاد کند، می‌توانید اسناد را به مجموعه داده در Dify آپلود کنید و یک چت بات بسازید. در گذشته، این ممکن بود هفته‌ها طول بکشد و حفظ مداوم آن دشوار باشد. +{% endhint %} + +### پایگاه دانش و اسناد + +در Dify، دانش مجموعه ای از اسناد است. یک پایگاه دانش می‌تواند به عنوان یک زمینه بازیابی در یک برنامه ادغام شود. اسناد را می‌توان توسط توسعه‌دهندگان یا یک عضو از تیم عملیاتی آپلود کرد، یا از منابع داده دیگر همگام‌سازی کرد (معمولا مربوط به یک فایل واحد در منبع داده). diff --git a/fa/guides/knowledge-base/connect-external-knowledge.md b/fa/guides/knowledge-base/connect-external-knowledge.md new file mode 100644 index 000000000..d835209dd --- /dev/null +++ b/fa/guides/knowledge-base/connect-external-knowledge.md @@ -0,0 +1,118 @@ +# اتصال به پایگاه دانش خارجی + +> برای ایجاد تمایز، پایگاه‌های دانش مستقل از پلتفرم Dify در این مقاله به طور جمعی به عنوان "پایگاه‌های دانش خارجی" نامیده می‌شوند. + +## معرفی عملکردی + + +برای توسعه دهندگانی که نیاز به بازیابی محتوای پیشرفته دارند، **عملکرد پایگاه دانش داخلی و مکانیزم‌های بازیابی متن پلتفرم Dify ممکن است محدودیت‌هایی داشته باشد، به‌ویژه از نظر سفارشی‌سازی نتایج بازیابی.** + +به دلیل نیاز به دقت بیشتر در بازیابی و فراخوانی متن، و همچنین نیاز به مدیریت مواد داخلی، برخی از تیم‌های توسعه دهنده تصمیم می‌گیرند به طور مستقل الگوریتم‌های RAG را توسعه دهند و به طور مستقل سیستم‌های بازیابی متن را حفظ کنند، یا به طور یکپارچه محتوای خود را به خدمات پایگاه دانش ارائه دهندگان ابر (مانند [AWS Bedrock](https://aws.amazon.com/bedrock/)). + +Dify، به عنوان یک پلتفرم خنثی برای توسعه برنامه‌های LLM، متعهد به ارائه طیف وسیع‌تری از گزینه‌ها به توسعه‌دهندگان است. + +ویژگی **اتصال به پایگاه دانش خارجی**، ادغام بین پلتفرم Dify و پایگاه‌های دانش خارجی را امکان‌پذیر می‌سازد. از طریق خدمات API، برنامه‌های هوش مصنوعی می‌توانند به طیف وسیع‌تری از منابع اطلاعاتی دسترسی پیدا کنند. این قابلیت دو مزیت کلیدی ارائه می‌دهد: + + +* پلتفرم Dify می‌تواند مستقیماً محتوای متنی میزبانی شده در پایگاه دانش ارائه دهنده خدمات ابری را دریافت کند، به طوری که توسعه دهندگان نیازی به انتقال مکرر محتوا به پایگاه دانش در Dify ندارند؛ + +* پلتفرم Dify می‌تواند مستقیماً محتوای متنی پردازش شده توسط الگوریتم‌ها در پایگاه دانش خود ساخته را دریافت کند. توسعه‌دهندگان فقط نیاز دارند روی مکانیزم بازیابی اطلاعات پایگاه دانش خود ساخته تمرکز کنند و به طور مداوم دقت بازیابی اطلاعات را بهینه و بهبود ببخشند. + +

اصل اتصال به پایگاه دانش خارجی

+ +در اینجا مراحل دقیق برای اتصال به دانش خارجی آورده شده است: + +## 1. ایجاد API پایگاه دانش خارجی مطابق با استانداردها + +قبل از تنظیم سرویس API، یک API پایگاه دانش خارجی مطابق با استانداردها ایجاد کنید، لطفاً برای اطمینان از ادغام موفقیت‌آمیز پایگاه دانش خارجی شما با Dify به مشخصات [API پایگاه دانش خارجی](external-knowledge-api-documentation.md) Dify مراجعه کنید. + +## 2. افزودن API دانش خارجی + +> در حال حاضر، هنگام اتصال به پایگاه‌های دانش خارجی، Dify فقط مجوزهای بازیابی را پشتیبانی می‌کند و پشتیبانی از بهینه‌سازی یا اصلاح پایگاه‌های دانش خارجی را پشتیبانی نمی‌کند. توسعه دهندگان باید خودشان پایگاه‌های دانش خارجی را حفظ کنند. + +به صفحه **"دانش"** بروید، در گوشه بالا سمت راست روی **"API دانش خارجی"** کلیک کنید، سپس روی **"افزودن API دانش خارجی"** کلیک کنید. اطلاعات زیر را طبق راهنمایی‌های صفحه تکمیل کنید: + +* نام نام قابل تنظیم برای تمایز APIهای دانش خارجی مختلف؛ +* نقطه انتهایی API URL نقطه انتهایی API پایگاه دانش خارجی، مانند api-endpoint/retrieval؛ برای راهنمایی‌های دقیق به [API دانش خارجی](external-knowledge-api-documentation.md) مراجعه کنید. +* کلید API کلید اتصال برای دانش خارجی، برای راهنمایی‌های دقیق به [API دانش خارجی](external-knowledge-api-documentation.md) مراجعه کنید. + +

API دانش خارجی را مرتبط کنید

+ +## 3. اتصال به پایگاه دانش خارجی + +به صفحه **"دانش"** بروید، در زیر کارت افزودن پایگاه دانش، روی **"اتصال به پایگاه دانش خارجی"** کلیک کنید تا مستقیماً به صفحه پیکربندی پارامتر منتقل شوید. + +

اتصال به پایگاه دانش خارجی

+ +پارامترهای زیر را پر کنید: + +* **نام و توضیحات پایگاه دانش** +* **API دانش خارجی** + + API پایگاه دانش خارجی مرتبط در مرحله 2 را انتخاب کنید. Dify محتوای متنی ذخیره شده در پایگاه دانش خارجی را از طریق روش اتصال API فراخوانی خواهد کرد. +* **شناسه دانش خارجی** + + شناسه خاص پایگاه دانش خارجی را که باید مرتبط باشد، مشخص کنید. برای راهنمایی‌های دقیق به تعریف API پایگاه دانش خارجی مراجعه کنید. +* **تنظیمات بازیابی** + + **Top K:** هنگامی که کاربر سوالی می‌فرستد، API دانش خارجی را برای به دست آوردن بخش‌های محتوای بسیار مرتبط درخواست می‌کند. این پارامتر برای فیلتر کردن بخش‌های متنی با شباهت بالا به سوال کاربر استفاده می‌شود. مقدار پیش فرض 3 است. هرچه این مقدار بالاتر باشد، بخش‌های متنی با شباهت‌های مرتبط بیشتری بازیابی می‌شوند. + + **آستانه امتیاز:** آستانه شباهت برای فیلتر کردن بخش‌های متنی، فقط بخش‌های متنی که از امتیاز تنظیم شده فراتر می‌روند را بازیابی می‌کند. مقدار پیش فرض 0.5 است. مقدار بالاتر نشان دهنده الزامات بالاتر برای شباهت بین متن و سوال است، انتظار می‌رود بخش‌های متنی بازیابی شده کمتر باشد و نتایج نسبتاً دقیق‌تر خواهند بود. + +
+ +## 4. تست پایگاه دانش خارجی و نتایج بازیابی + +بعد از اتصال به پایگاه دانش خارجی، توسعه‌دهندگان می‌توانند کلمات کلیدی سوال احتمالی را در **"تست بازیابی"** شبیه‌سازی کنند تا پیش‌نمایش بخش‌های متنی که ممکن است بازیابی شوند را مشاهده کنند. اگر از نتایج بازیابی راضی نیستید، سعی کنید **تنظیمات پایگاه دانش خارجی** را تغییر دهید یا استراتژی بازیابی پایگاه دانش خارجی را تنظیم کنید. + +

تست اتصال به پایگاه دانش خارجی و بازیابی

+ +## 5. ادغام پایگاه دانش خارجی در برنامه‌ها + +* برنامه نوع **چت بات / عامل** + + پایگاه دانش خارجی را در صفحه تنظیمات در برنامه‌های نوع چت بات / عامل مرتبط کنید. + +

چت بات / عامل

+ +* برنامه نوع **جریان چت / گردش کار** + + یک گره **"بازیابی دانش"** اضافه کنید و پایگاه دانش خارجی را انتخاب کنید. + +

جریان چت / گردش کار

+ +## 6. مدیریت دانش خارجی + +به صفحه **"دانش"** بروید، کارت‌های پایگاه دانش خارجی یک برچسب **EXTERNAL** در گوشه بالا سمت راست خواهند داشت. پایگاه دانش مورد نیاز برای تغییر را انتخاب کنید، روی **"تنظیمات"** کلیک کنید تا اطلاعات زیر را تغییر دهید: + +* **نام و توضیحات پایگاه دانش** +* **مجوزها** + + حوزه مجوز **"فقط من"**، **"همه اعضای تیم"**، و **"برخی از اعضای تیم"** را ارائه دهید. افرادی که مجوز ندارند، نمی‌توانند به پایگاه دانش دسترسی داشته باشند. اگر انتخاب می‌کنید که پایگاه دانش را برای سایر اعضا عمومی کنید، به این معنی است که سایر اعضا نیز حق مشاهده، ویرایش و حذف پایگاه دانش را دارند. +* **تنظیمات بازیابی** + + **Top K:** هنگامی که کاربر سوالی می‌فرستد، API دانش خارجی را برای به دست آوردن بخش‌های محتوای بسیار مرتبط درخواست می‌کند. این پارامتر برای فیلتر کردن بخش‌های متنی با شباهت بالا به سوال کاربر استفاده می‌شود. مقدار پیش فرض 3 است. هرچه این مقدار بالاتر باشد، بخش‌های متنی با شباهت‌های مرتبط بیشتری بازیابی می‌شوند. + + **آستانه امتیاز:** آستانه شباهت برای فیلتر کردن بخش‌های متنی، فقط بخش‌های متنی که از امتیاز تنظیم شده فراتر می‌روند را بازیابی می‌کند. مقدار پیش فرض 0.5 است. مقدار بالاتر نشان دهنده الزامات بالاتر برای شباهت بین متن و سوال است، انتظار می‌رود بخش‌های متنی بازیابی شده کمتر باشد و نتایج نسبتاً دقیق‌تر خواهند بود. + +**"API دانش خارجی"** و **"شناسه دانش خارجی"** مرتبط با پایگاه دانش خارجی از تغییر پشتیبانی نمی‌کنند. اگر نیاز به تغییر دارید، لطفاً یک **"API دانش خارجی"** جدید را مرتبط کنید و آن را تنظیم مجدد کنید. + +
+ +### مثال اتصال + +[چگونه به پایگاه دانش AWS Bedrock متصل شویم؟](../../learn-more/use-cases/how-to-connect-aws-bedrock.md "mention") + +## سوالات متداول + +**چگونه خطاهایی که هنگام اتصال به API دانش خارجی رخ می‌دهند را برطرف کنیم؟** + +راه حل‌های مربوط به هر کد خطا در اطلاعات برگشتی: + +| کد خطا | نتیجه | راه حل‌ها | +| ---------- | ----------------------------------- | ----------------------------------------------------------- | +| 1001 | فرمت هدر تأیید اعتبار نامعتبر | لطفاً فرمت هدر تأیید اعتبار درخواست را بررسی کنید | +| 1002 | تأیید اعتبار ناموفق | لطفاً بررسی کنید که آیا کلید API وارد شده صحیح است. | +| 2001 | دانش وجود ندارد | لطفاً مخزن خارجی را بررسی کنید | + + diff --git a/fa/guides/knowledge-base/create-knowledge-and-upload-documents.md b/fa/guides/knowledge-base/create-knowledge-and-upload-documents.md new file mode 100644 index 000000000..9fa70a38d --- /dev/null +++ b/fa/guides/knowledge-base/create-knowledge-and-upload-documents.md @@ -0,0 +1,240 @@ +# پایگاه دانش و آپلود اسناد را ایجاد کنید + +**مراحل آپلود اسناد در پایگاه دانش:** + +1. سند مورد نظر خود را از فایل‌های محلی انتخاب کنید. +2. سند را قطعه بندی و پاکسازی کنید و پیش نمایش تأثیر آن را مشاهده کنید. +3. حالت نمایه سازی و تنظیمات بازیابی را انتخاب و پیکربندی کنید. +4. منتظر بمانید تا قطعات تعبیه شوند. +5. آپلود کامل شد، اکنون می‌توانید از آن در برنامه‌های خود استفاده کنید 🎉 + +### 1 ایجاد پایگاه دانش + +در نوار ناوبری اصلی Dify، روی Knowledge کلیک کنید. در این صفحه می‌توانید پایگاه‌های دانش موجود خود را مشاهده کنید. برای ورود به راهنمای تنظیم، روی **ایجاد دانش** کلیک کنید: + +* فایل‌ها را برای آپلود بکشید و رها کنید یا آن‌ها را انتخاب کنید. تعداد فایل‌های مجاز برای آپلود دسته ای به [برنامه اشتراک](https://dify.ai/pricing) شما بستگی دارد. +* اگر هنوز هیچ سندی آماده نکرده اید، ابتدا می‌توانید یک پایگاه دانش خالی ایجاد کنید. +* هنگام ایجاد پایگاه دانش با منبع داده خارجی (مانند Notion یا همگام سازی از وب سایت)، نوع پایگاه دانش ثابت می‌شود. این محدودیت از پیچیدگی‌های مدیریتی که ممکن است از چندین منبع داده در یک پایگاه دانش واحد ایجاد شود، جلوگیری می‌کند. + + برای سناریوهایی که نیاز به چندین منبع داده دارند، توصیه می‌کنیم پایگاه‌های دانش جداگانه ای برای هر منبع ایجاد کنید. سپس می‌توانید از ویژگی [بازیابی چندگانه](integrate-knowledge-within-application.md) برای ارجاع به چندین پایگاه دانش در یک برنامه استفاده کنید. + +**محدودیت‌های آپلود اسناد:** + +* حد مجاز اندازه آپلود برای هر سند 15 مگابایت است. +* [برنامه‌های اشتراک](https://dify.ai/pricing) مختلف برای نسخه SaaS **تعداد آپلود دسته ای، کل آپلود اسناد و ذخیره سازی برداری** را محدود می‌کنند. + +

ایجاد پایگاه دانش

+ +*** + +### 2 پیش پردازش و پاکسازی متن + +پس از آپلود محتوا در پایگاه دانش، باید تحت قطعه بندی و پاکسازی داده قرار گیرد. این مرحله را می‌توان به عنوان پیش پردازش و ساختاردهی محتوا درک کرد. + +
+ +قطعه بندی و پاکسازی متن چیست؟ + +**قطعه بندی**: LLMs پنجره متن محدودی دارند، معمولا نیاز به تقسیم کل متن و سپس یادآوری مرتبط ترین بخش‌ها به سوال کاربر، که به عنوان حالت یادآوری TopK segment شناخته می‌شود. علاوه بر این، اندازه بخش مناسب به تطبیق مرتبط ترین محتوای متنی و کاهش نویز اطلاعات هنگام تطبیق معنایی سوالات کاربر با بخش‌های متنی کمک می‌کند. + +**پاکسازی**: برای اطمینان از کیفیت یادآوری متن، معمولا قبل از ارسال به مدل، پاکسازی داده ضروری است. به عنوان مثال، کاراکترهای ناخواسته یا خطوط خالی در خروجی ممکن است بر کیفیت پاسخ تأثیر بگذارد. برای کمک به کاربران برای حل این مشکل، Dify روش‌های مختلفی برای پاکسازی ارائه می‌دهد تا به پاکسازی خروجی قبل از ارسال آن به برنامه‌های پایین دستی کمک کند، [ETL](create-knowledge-and-upload-documents.md#optional-etl-configuration) را بررسی کنید تا جزئیات بیشتری بدانید. + +
+ +دو استراتژی پشتیبانی می شوند: + +* حالت خودکار +* حالت سفارشی + +{% tabs %} +{% tab title="خودکار" %} +#### خودکار + +حالت خودکار برای کاربرانی طراحی شده است که با تکنیک‌های قطعه بندی و پیش پردازش آشنایی ندارند. در این حالت، Dify به طور خودکار فایل‌های محتوایی را قطعه بندی و پاکسازی می‌کند و فرآیند آماده سازی سند را ساده می‌کند. + +

حالت خودکار

+{% endtab %} + +{% tab title="سفارشی" %} +#### سفارشی + +حالت سفارشی برای کاربران پیشرفته با نیازهای خاص پردازش متن مناسب است. این حالت به پیکربندی دستی قوانین قطعه بندی و استراتژی‌های پاکسازی براساس قالب‌های سند و تقاضای سناریوهای مختلف اجازه می‌دهد. + +**قوانین قطعه بندی:** + +1. **جداساز**: یک جداساز برای قطعه بندی متن مشخص کنید. به عنوان مثال، `\n` (کاراکتر خط جدید در [regex](https://regexr.com/)) متن را در هر خط شکسته تقسیم می‌کند. +2. **حداکثر طول قطعه**: حداکثر تعداد کاراکتر در هر بخش را تنظیم کنید. بخش‌هایی که از این حد مجاز بیشتر هستند، به زور تقسیم می‌شوند. حداکثر طول برای یک بخش 4000 توکن است. +3. **پوشش قطعه**: همپوشانی بین بخش‌های مجاور را تعریف کنید. این همپوشانی حفظ اطلاعات و دقت تجزیه و تحلیل را افزایش می‌دهد و کارایی یادآوری را بهبود می‌بخشد. تنظیم توصیه شده 10-25٪ از طول بخش به توکن است. + +**قوانین پیش پردازش متن**: این قوانین به فیلتر کردن محتوای غیر مهم از پایگاه دانش کمک می‌کنند. + +* جایگزینی فضاهای پی در پی، خطوط جدید و تب‌ها. +* حذف تمام URLها و آدرس‌های ایمیل. + +

حالت سفارشی

+{% endtab %} +{% endtabs %} + +*** + +### 3 حالت نمایه سازی + +شما باید **روش نمایه سازی** را برای متن انتخاب کنید تا روش تطبیق داده را مشخص کنید. استراتژی نمایه سازی اغلب به روش بازیابی مربوط می‌شود و شما باید [تنظیمات بازیابی](create-knowledge-and-upload-documents.md#id-4-retrieval-settings) مناسب را با توجه به سناریو انتخاب کنید. + +* **حالت با کیفیت بالا** +* **حالت اقتصادی** +* **حالت سوال و جواب** + +{% tabs %} +{% tab title="با کیفیت بالا" %} +در حالت با کیفیت بالا، سیستم ابتدا از یک مدل تعبیه قابل تنظیم (که قابل تعویض است) برای تبدیل متن قطعه به بردارهای عددی استفاده می‌کند. این فرآیند به فشرده سازی کارآمد و ذخیره سازی پایدار داده‌های متنی در مقیاس بزرگ کمک می‌کند و در عین حال دقت تعاملات کاربر-LLM را افزایش می‌دهد. + +روش نمایه سازی با کیفیت بالا سه تنظیم بازیابی ارائه می‌دهد: بازیابی برداری، بازیابی متن کامل و بازیابی ترکیبی. برای اطلاعات بیشتر در مورد تنظیمات بازیابی، لطفا [“تنظیمات بازیابی”](create-knowledge-and-upload-documents.md#id-4-retrieval-settings) را بررسی کنید. + +

با کیفیت بالا

+{% endtab %} + +{% tab title="اقتصادی" %} +این حالت از یک موتور برداری آفلاین و نمایه سازی کلمات کلیدی استفاده می‌کند که دقت را کاهش می‌دهد اما مصرف توکن اضافی و هزینه‌های مرتبط را از بین می‌برد. روش نمایه سازی به نمایه سازی معکوس محدود شده است. برای مشخصات دقیق، لطفا به بخش زیر مراجعه کنید. + +

حالت اقتصادی

+{% endtab %} + +{% tab title="حالت سوال و جواب (فقط نسخه جامعه)" %} +هنگامی که اسناد به پایگاه دانش آپلود می‌شوند، سیستم متن را قطعه بندی می‌کند و از طریق خلاصه سازی جفت‌های سوال و جواب را برای هر قطعه تولید می‌کند. برخلاف استراتژی "Q to P" (سوال به پاراگراف) که در حالت‌های با کیفیت بالا و اقتصادی به کار گرفته می‌شود، حالت QA از رویکرد "Q to Q" (سوال به سوال) استفاده می‌کند. + +این روش **به دلیل اینکه متن‌های سوال معمولا ساختارهای دستوری کامل را در زبان طبیعی نشان می‌دهند**، ارجحیت دارد. الگوی تطبیق Q to Q، درک و تطبیق بخش‌های واضح‌تر را تسهیل می‌کند و همچنین سناریوهایی را در بر می‌گیرد که شامل پرس و جوهای پرکاربرد و بسیار مشابه هستند. + +پس از سوال کاربر، سیستم سوال مشابه ترین از نظر معنایی را شناسایی می‌کند و بخش متنی مربوطه را به عنوان پاسخ برمی‌گرداند. این روش دقت را افزایش می‌دهد، زیرا به طور مستقیم با پرس و جوهای کاربر مطابقت دارد و در نتیجه اطلاعات مورد نیاز کاربران را به طور دقیقتر بازیابی می‌کند. + +

متون خلاصه شده در چندین جفت Q&A در حالت بخش QA

+ +

تفاوت بین حالت‌های نمایه سازی Q to P و Q to Q

+{% endtab %} +{% endtabs %} + +*** + +### 4 تنظیمات بازیابی + +در حالت نمایه سازی با کیفیت بالا، Dify سه تنظیم بازیابی ارائه می‌دهد: + +* **جستجوی برداری** +* **جستجوی متن کامل** +* **جستجوی ترکیبی** + +{% tabs %} +{% tab title="جستجوی برداری" %} +#### جستجوی برداری + +**تعریف**: سیستم پرس و جو ورودی کاربر را به بردار برای تولید یک بردار پرس و جو تبدیل می‌کند. سپس فاصله بین این بردار پرس و جو و بردارهای متنی در پایگاه دانش را برای شناسایی مرتبط ترین بخش‌های متنی محاسبه می‌کند. + +

تنظیمات جستجوی برداری

+ +**تنظیمات جستجوی برداری:** + +**مدل رتبه بندی**: پس از پیکربندی کلید API برای مدل رتبه بندی در صفحه "ارائه دهنده مدل"، می‌توانید "مدل رتبه بندی" را در تنظیمات بازیابی فعال کنید. سپس سیستم پس از بازیابی ترکیبی، مرتب سازی معنایی نتایج سند بازیابی شده را انجام می‌دهد و نتایج رتبه بندی را بهینه‌سازی می‌کند. پس از ایجاد مدل رتبه بندی، تنظیمات TopK و Score Threshold فقط در مرحله رتبه بندی اعمال می‌شوند. + +**TopK**: این پارامتر بخش‌های متنی را فیلتر می‌کند که شباهت بیشتری به سوال کاربر دارند. سیستم تعداد اسنیپت‌ها را براساس اندازه پنجره متن مدل انتخاب شده به طور پویا تنظیم می‌کند. مقدار پیش فرض 3 است، به این معنی که مقدار بالاتر منجر به بازیابی بخش‌های متنی بیشتر می‌شود. + +**آستانه امتیاز**: این پارامتر آستانه شباهت را برای فیلتر کردن بخش‌های متنی تنظیم می‌کند. فقط بخش‌های متنی که از امتیاز مشخص شده فراتر می‌روند، یادآوری می‌شوند. به طور پیش فرض، این تنظیم غیرفعال است، به این معنی که هیچ فیلتر کردن ارزشی برای بخش‌های متنی یادآوری شده وجود نخواهد داشت. در صورت فعال شدن، مقدار پیش فرض 0.5 است. مقدار بالاتر به احتمال زیاد منجر به بازیابی متون کمتر می‌شود. + +> تنظیمات TopK و Score فقط در مرحله رتبه بندی موثر هستند. بنابراین، برای اعمال هر یک از این تنظیمات، لازم است که یک مدل رتبه بندی اضافه و فعال کنید. +{% endtab %} + +{% tab title="جستجوی متن کامل" %} +#### جستجوی متن کامل + +**تعریف:** نمایه سازی تمام اصطلاحات در سند، به کاربران اجازه می‌دهد تا هر اصطلاحی را پرس و جو کنند و بخش‌های متنی حاوی آن اصطلاحات را برگردانند. + +

تنظیمات جستجوی متن کامل

+ +**مدل رتبه بندی**: پس از پیکربندی کلید API برای مدل رتبه بندی در صفحه "ارائه دهنده مدل"، می‌توانید "مدل رتبه بندی" را در تنظیمات بازیابی فعال کنید. سپس سیستم پس از بازیابی ترکیبی، مرتب سازی معنایی نتایج سند بازیابی شده را انجام می‌دهد و نتایج رتبه بندی را بهینه‌سازی می‌کند. پس از ایجاد مدل رتبه بندی، تنظیمات TopK و Score Threshold فقط در مرحله رتبه بندی اعمال می‌شوند. + +**TopK**: این پارامتر بخش‌های متنی را فیلتر می‌کند که شباهت بیشتری به سوال کاربر دارند. سیستم تعداد اسنیپت‌ها را براساس اندازه پنجره متن مدل انتخاب شده به طور پویا تنظیم می‌کند. مقدار پیش فرض 3 است، به این معنی که مقدار بالاتر منجر به بازیابی بخش‌های متنی بیشتر می‌شود. + +**آستانه امتیاز**: این پارامتر آستانه شباهت را برای فیلتر کردن بخش‌های متنی تنظیم می‌کند. فقط بخش‌های متنی که از امتیاز مشخص شده فراتر می‌روند، یادآوری می‌شوند. به طور پیش فرض، این تنظیم غیرفعال است، به این معنی که هیچ فیلتر کردن ارزشی برای بخش‌های متنی یادآوری شده وجود نخواهد داشت. در صورت فعال شدن، مقدار پیش فرض 0.5 است. مقدار بالاتر به احتمال زیاد منجر به بازیابی متون کمتر می‌شود. + +> تنظیمات TopK و Score فقط در مرحله رتبه بندی موثر هستند. بنابراین، برای اعمال هر یک از این تنظیمات، لازم است که یک مدل رتبه بندی اضافه و فعال کنید. +{% endtab %} + +{% tab title="جستجوی ترکیبی" %} +#### **جستجوی ترکیبی** + +**تعریف:** این فرآیند همزمان جستجوی متن کامل و جستجوی برداری را انجام می‌دهد و شامل یک مرحله مرتب سازی مجدد برای انتخاب بهترین نتایج است که با پرس و جو کاربر از هر دو نوع نتیجه جستجو مطابقت دارد. در این حالت، کاربران می‌توانند بدون نیاز به پیکربندی API مدل رتبه بندی، "تنظیمات وزن" را مشخص کنند یا می‌توانند برای بازیابی، یک مدل رتبه بندی را انتخاب کنند. + +

تنظیمات بازیابی ترکیبی

+ +**تنظیمات وزن**: این ویژگی به کاربران اجازه می‌دهد تا وزن‌های سفارشی را برای اولویت معنایی و اولویت کلمات کلیدی تنظیم کنند. جستجوی کلمات کلیدی به معنای انجام جستجوی متن کامل در پایگاه دانش است، در حالی که جستجوی معنایی شامل جستجوی برداری در پایگاه دانش است. + +* **ارزش معنایی 1** + +این حالت فقط حالت جستجوی معنایی را فعال می‌کند. با استفاده از مدل‌های تعبیه، حتی اگر اصطلاحات دقیق از پرس و جو در پایگاه دانش ظاهر نشوند، جستجو می‌تواند با محاسبه فاصله بردارها، در عمق بیشتری جستجو کند و در نتیجه محتوای مرتبط را برگرداند. علاوه بر این، هنگام برخورد با محتوای چند زبانه، جستجوی معنایی می‌تواند معنای را در زبان‌های مختلف درک کند و نتایج جستجوی دقیق‌تر بین زبانی را ارائه دهد. + +* **ارزش کلمات کلیدی 1** + +این حالت فقط حالت جستجوی کلمات کلیدی را فعال می‌کند. این حالت تطابق کامل را با متن ورودی در پایگاه دانش انجام می‌دهد که برای سناریوهایی که کاربر اطلاعات یا اصطلاحات دقیق را می‌شناسد، مناسب است. این رویکرد از منابع محاسباتی کمتری استفاده می‌کند و برای جستجوهای سریع در یک پایگاه دانش سند بزرگ ایده‌آل است. + +* **وزن‌های سفارشی کلمات کلیدی و معنایی** + +علاوه بر فعال کردن فقط جستجوی معنایی یا جستجوی کلمات کلیدی، تنظیمات وزن سفارشی انعطاف پذیری را ارائه می‌دهیم. می‌توانید به طور مداوم وزن‌های دو روش را تنظیم کنید تا نسبت وزنی بهینه را پیدا کنید که با سناریو تجاری شما مطابقت دارد. + +*** + +**مدل رتبه بندی**: پس از پیکربندی کلید API برای مدل رتبه بندی در صفحه "ارائه دهنده مدل"، می‌توانید "مدل رتبه بندی" را در تنظیمات بازیابی فعال کنید. سپس سیستم پس از بازیابی ترکیبی، مرتب سازی معنایی نتایج سند بازیابی شده را انجام می‌دهد و نتایج رتبه بندی را بهینه‌سازی می‌کند. پس از ایجاد مدل رتبه بندی، تنظیمات TopK و Score Threshold فقط در مرحله رتبه بندی اعمال می‌شوند. + +*** + +تنظیمات **"تنظیمات وزن"** و **"مدل رتبه بندی"** گزینه‌های زیر را پشتیبانی می‌کنند: + +**TopK**: این پارامتر بخش‌های متنی را فیلتر می‌کند که شباهت بیشتری به سوال کاربر دارند. سیستم تعداد اسنیپت‌ها را براساس اندازه پنجره متن مدل انتخاب شده به طور پویا تنظیم می‌کند. مقدار پیش فرض 3 است، به این معنی که مقدار بالاتر منجر به بازیابی بخش‌های متنی بیشتر می‌شود. + +**آستانه امتیاز**: این پارامتر آستانه شباهت را برای فیلتر کردن بخش‌های متنی تنظیم می‌کند. فقط بخش‌های متنی که از امتیاز مشخص شده فراتر می‌روند، یادآوری می‌شوند. به طور پیش فرض، این تنظیم غیرفعال است، به این معنی که هیچ فیلتر کردن ارزشی برای بخش‌های متنی یادآوری شده وجود نخواهد داشت. در صورت فعال شدن، مقدار پیش فرض 0.5 است. مقدار بالاتر به احتمال زیاد منجر به بازیابی متون کمتر می‌شود. +{% endtab %} +{% endtabs %} + +در حالت **نمایه سازی اقتصادی**، Dify یک تنظیم بازیابی واحد ارائه می‌دهد: + +#### نمایه معکوس: + +نمایه معکوس یک ساختار نمایه است که برای بازیابی سریع کلمات کلیدی در اسناد طراحی شده است. اصل اساسی آن شامل نگاشت کلمات کلیدی از اسناد به لیست‌هایی از اسناد حاوی آن کلمات کلیدی است و به این ترتیب کارایی جستجو را افزایش می‌دهد. برای توضیح دقیق مکانیزم زیربنایی، لطفا به ["نمایه معکوس"](https://en.wikipedia.org/wiki/Inverted_index) مراجعه کنید. + +**TopK:** + +این پارامتر بخش‌های متنی را فیلتر می‌کند که شباهت بیشتری به سوال کاربر دارند. سیستم تعداد اسنیپت‌ها را براساس اندازه پنجره متن مدل انتخاب شده به طور پویا تنظیم می‌کند. مقدار پیش فرض 3 است، به این معنی که مقدار بالاتر منجر به بازیابی بخش‌های متنی بیشتر می‌شود. + +

نمایه معکوس

+ +*** + +### مرجع + +#### تنظیمات ETL اختیاری + +در برنامه‌های سطح تولید RAG، برای دستیابی به یادآوری بهتر داده‌ها، باید داده‌های چند منبعی را پیش پردازش و پاکسازی کرد، یعنی ETL (استخراج، تبدیل، بارگذاری). برای افزایش قابلیت‌های پیش پردازش داده‌های بدون ساختار/نیمه ساختار یافته، Dify از راه‌حل‌های ETL اختیاری پشتیبانی می‌کند: **Dify ETL** و [**Unstructured ETL**](https://unstructured.io/). + +> Unstructured می‌تواند داده‌های شما را به طور موثر استخراج و تبدیل کند تا داده‌های تمیز برای مراحل بعدی ایجاد کند. + +انتخاب‌های راه‌حل ETL در نسخه‌های مختلف Dify: + +* نسخه SaaS به طور پیش فرض از Unstructured ETL استفاده می‌کند و قابل تغییر نیست. +* نسخه جامعه به طور پیش فرض از Dify ETL استفاده می‌کند اما می‌تواند Unstructured ETL را از طریق [متغیرهای محیطی](../../getting-started/install-self-hosted/environments.md#zhi-shi-ku-pei-zhi) فعال کند. + +تفاوت در قالب‌های فایل پشتیبانی شده برای تجزیه: + +| 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 %} + +#### مدل تعبیه + +**تعبیه** متغیرهای گسسته (کلمات، جملات، اسناد) را به نمایش‌های برداری پیوسته تبدیل می‌کند و داده‌های با ابعاد بالا را به فضاهای با ابعاد کمتر نگاشت می‌کند. این تکنیک اطلاعات معنایی مهم را در حالی که بعد را کاهش می‌دهد، حفظ می‌کند و کارایی بازیابی محتوا را افزایش می‌دهد. + +**مدل‌های تعبیه**، مدل‌های زبان بزرگ تخصصی، در تبدیل متن به بردارهای عددی متراکم برتری دارند و به طور موثر تفاوت‌های معنایی را برای پردازش و تجزیه و تحلیل بهتر داده‌ها به دست می‌آورند. + + + diff --git a/fa/guides/knowledge-base/external-data-tool.md b/fa/guides/knowledge-base/external-data-tool.md new file mode 100644 index 000000000..b0b20bec1 --- /dev/null +++ b/fa/guides/knowledge-base/external-data-tool.md @@ -0,0 +1,36 @@ +# ابزار داده‌های خارجی + +## معرفی ویژگی + +قبلاً ویژگی [.](./ "ذکر") به توسعه‌دهندگان اجازه می‌داد تا مستقیماً انواع مختلفی از متن‌های طولانی و داده‌های ساختاریافته را برای ساخت مجموعه داده‌ها بارگذاری کنند و به برنامه‌های هوش مصنوعی اجازه می‌دادند تا با توجه به جدیدترین زمینه ارائه شده توسط کاربر، در گفتگوها شرکت کنند. + +با این به‌روزرسانی، **ابزار داده‌های خارجی** به توسعه‌دهندگان قدرت می‌دهد تا از قابلیت‌های جستجوی خود یا پایگاه‌های دانش داخلی خود به عنوان داده‌های خارجی برای زمینه LLM استفاده کنند. این کار با گسترش API برای بازیابی و تعبیه داده‌های خارجی در اعلان‌ها انجام می‌شود. در مقایسه با بارگذاری مجموعه داده‌ها در ابر، استفاده از **ابزار داده‌های خارجی** مزایای قابل توجهی در تضمین امنیت داده‌های خصوصی، سفارشی‌سازی جستجوها و دسترسی به داده‌های بلادرنگ ارائه می‌دهد. + +## جزئیات پیاده‌سازی + +هنگامی که یک کاربر نهایی درخواستی به سیستم گفتگو ارسال می‌کند، بک‌اند پلتفرم ابزار داده‌های خارجی را فعال می‌کند (یعنی API خود را فراخوانی می‌کند). اطلاعات خارجی مربوط به سوال کاربر مانند پروفایل کارمندان یا سوابق بلادرنگ را جستجو می‌کند و بخش‌های مرتبط را از طریق API بازمی‌گرداند. بک‌اند پلتفرم نتایج بازگردانده شده را به متن تبدیل می‌کند و آن را به عنوان زمینه در اعلان قرار می‌دهد تا پاسخ‌های شخصی‌تر و مطابق با نیاز کاربر ارائه شود. + +## دستورالعمل‌های عملیاتی + +1. قبل از استفاده از ابزار داده‌های خارجی، باید یک API و یک کلید API برای احراز هویت آماده کنید. لطفاً [ابزار داده‌های خارجی](https://docs.dify.ai/guides/extension/api-based-extension/external-data-tool) را مطالعه کنید. +2. Dify مدیریت API متمرکز را ارائه می‌دهد. پس از افزودن پیکربندی توسعه API در رابط تنظیمات، می‌توان از آن مستقیماً در برنامه‌های مختلف Dify استفاده کرد. + +

توسعه مبتنی بر API

+ +3. به عنوان مثال، برای "جستجوی آب و هوا"، نام، نقطه انتهایی API و کلید API را در کادر محاوره‌ای "افزودن توسعه مبتنی بر API" وارد کنید. پس از ذخیره، می‌توانیم API را فراخوانی کنیم. + +

جستجوی آب و هوا

+ +4. در صفحه هماهنگی اعلان، روی دکمه "+ Add" کنار "ابزارها" کلیک کنید. در کادر محاوره‌ای "افزودن ابزار" باز شده، نام و نام متغیر را پر کنید (نام متغیر در اعلان ارجاع داده می‌شود، لطفاً انگلیسی را پر کنید) و توسعه مبتنی بر API را که در مرحله 2 اضافه شده است انتخاب کنید. + +

External_data_tool

+ +5. به این ترتیب، می‌توانیم داده‌های خارجی پرس و جو شده را در اعلان قرار دهیم. به عنوان مثال، برای پرس و جو در مورد آب و هوای امروز در لندن، می‌توانید متغیر `location` را اضافه کنید، "لندن" را وارد کنید، آن را با نام متغیر توسعه ابزار داده‌های خارجی `weather_data` ترکیب کنید، و خروجی اشکال زدایی به شرح زیر خواهد بود: + +

ابزار جستجوی آب و هوا

+ +همچنین می‌توانیم داده‌های بلادرنگ بازگردانده شده توسط API را در لاگ‌های گفتگو ببینیم: + +

لاگ اعلان

+ + diff --git a/fa/guides/knowledge-base/external-knowledge-api-documentation.md b/fa/guides/knowledge-base/external-knowledge-api-documentation.md new file mode 100644 index 000000000..3e00152fc --- /dev/null +++ b/fa/guides/knowledge-base/external-knowledge-api-documentation.md @@ -0,0 +1,9 @@ +--- +description: 'ویرایشگر: آلن. نویسنده فنی Dify' +--- + +# API دانش خارجی + +{% swagger src="../../.gitbook/assets/Dify-test.openapi.json" path="/retrieval" method="post" %} +[Dify-test.openapi.json](../../.gitbook/assets/Dify-test.openapi.json) +{% endswagger %} diff --git a/fa/guides/knowledge-base/integrate-knowledge-within-application.md b/fa/guides/knowledge-base/integrate-knowledge-within-application.md new file mode 100644 index 000000000..9c9c1e681 --- /dev/null +++ b/fa/guides/knowledge-base/integrate-knowledge-within-application.md @@ -0,0 +1,102 @@ +# یکپارچه سازی پایگاه دانش در برنامه + +### ایجاد برنامه ای که با پایگاه دانش یکپارچه شده است + +یک **"پایگاه دانش"** می تواند به عنوان یک منبع اطلاعات خارجی برای ارائه پاسخ های دقیق به سوالات کاربران از طریق LLM مورد استفاده قرار گیرد. شما می توانید یک پایگاه دانش موجود را با هر نوع برنامه [نوع برنامه](https://docs.dify.ai/guides/application-orchestrate#application\_type) در Dify مرتبط کنید. + +به عنوان مثال، با استفاده از یک دستیار چت، این فرآیند به شرح زیر است: + +1. به **دانش -- ایجاد دانش -- آپلود فایل** بروید. +2. به **استودیو -- ایجاد برنامه -- انتخاب ربات چت** بروید. +3. **متن** را وارد کنید، روی **افزودن** کلیک کنید و یکی از پایگاه های دانش ایجاد شده را انتخاب کنید. +4. در **تنظیمات متن -- تنظیمات بازیابی**، **تنظیمات بازیابی** را پیکربندی کنید. +5. **نقل قول و انتساب** را در **افزودن ویژگی ها** فعال کنید. +6. در **دیباگ و پیش نمایش**، سوالات کاربران مرتبط با پایگاه دانش را برای دیباگ وارد کنید. +7. پس از دیباگ، روی دکمه **انتشار** کلیک کنید تا یک برنامه AI بر اساس دانش خودتان ایجاد کنید! + +*** + +### اتصال دانش و تنظیم حالت بازیابی + +در برنامه هایی که از چندین پایگاه دانش استفاده می کنند، پیکربندی حالت بازیابی برای افزایش دقت محتوای بازیابی شده ضروری است. برای تنظیم حالت بازیابی برای پایگاه های دانش، به **متن -- تنظیمات بازیابی -- تنظیمات دوباره مرتب سازی** بروید. + +#### تنظیمات بازیابی + +بازیابنده، تمام پایگاه های دانش مرتبط با برنامه را برای محتوای متنی مرتبط با سوال کاربر اسکن می کند. سپس نتایج ادغام می شوند. در زیر نمودار فنی برای حالت بازیابی چند مسیر وجود دارد: + +
+ +این روش به طور همزمان تمام پایگاه های دانش متصل شده در **"متن"** را برای یافتن قطعات متن مرتبط در چندین پایگاه دانش، جمع آوری تمام محتوایی که با سوال کاربر مطابقت دارد، و در نهایت اعمال استراتژی دوباره مرتب سازی برای شناسایی مناسب ترین محتوا برای پاسخ به کاربر، مورد پرس و جو قرار می دهد. این رویکرد بازیابی با بهره گیری از چندین پایگاه دانش به طور همزمان، نتایج جامع تر و دقیق تری ارائه می دهد. + +
+ +به عنوان مثال، در برنامه A، با سه پایگاه دانش K1، K2، و K3. زمانی که یک کاربر سوالی ارسال می کند، چندین قطعه محتوا مرتبط از این پایگاه های دانش بازیابی و ترکیب می شوند. برای اطمینان از شناسایی مناسب ترین محتوا، استراتژی دوباره مرتب سازی برای یافتن محتوایی که بهترین ارتباط را با پرس و جو کاربر دارد، به کار گرفته می شود و دقت و قابلیت اطمینان نتایج را بهبود می بخشد. + +در سناریوهای عملی سوال و جواب، منابع محتوا و روش های بازیابی برای هر پایگاه دانش ممکن است متفاوت باشد. برای مدیریت محتوای ترکیبی بازگردانده شده از بازیابی، استراتژی [دوباره مرتب سازی](https://docs.dify.ai/learn-more/extended-reading/retrieval-augment/rerank) به عنوان یک مکانیسم مرتب سازی دقیق عمل می کند. این اطمینان می دهد که محتوای کاندید به خوبی با سوال کاربر هماهنگ است و رتبه بندی نتایج را در چندین پایگاه دانش برای شناسایی مناسب ترین محتوا بهینه می کند و در نتیجه کیفیت پاسخ و تجربه کلی کاربر را بهبود می بخشد. + +با توجه به هزینه های مرتبط با استفاده از دوباره مرتب سازی و نیازهای تجاری، حالت بازیابی چند مسیر دو تنظیم دوباره مرتب سازی را ارائه می دهد: + +**امتیاز وزنی** + +این تنظیم از مکانیسم های امتیازدهی داخلی استفاده می کند و نیازی به مدل دوباره مرتب سازی خارجی ندارد و در نتیجه **از هرگونه هزینه پردازش اضافی جلوگیری می کند**. می توانید با تنظیم نوار لغزنده نسبت وزن برای معنای شناسی یا کلمات کلیدی، مناسب ترین استراتژی تطبیق محتوا را انتخاب کنید. + +* **ارزش معنایی شناسی 1** + + این حالت فقط بازیابی معنایی شناسی را فعال می کند. با استفاده از مدل Embedding، عمق جستجو را می توان حتی اگر کلمات دقیق از پرس و جو در پایگاه دانش ظاهر نشوند، افزایش داد، زیرا فاصله برداری را برای بازگرداندن محتوای مرتبط محاسبه می کند. علاوه بر این، هنگام برخورد با محتوای چند زبانه، بازیابی معنایی شناسی می تواند معانی را در زبان های مختلف به دست آورد و نتایج جستجوی دقیق تری در چند زبان را به دست آورد. +* **ارزش کلمه کلیدی 1** + + این حالت فقط بازیابی کلمه کلیدی را فعال می کند. متن ورودی کاربر را با متن کامل پایگاه دانش مطابقت می دهد و آن را برای سناریوهایی که کاربر اطلاعات یا اصطلاحات دقیق را می داند، ایده آل می کند. این روش به طور کارآمد منابع را مصرف می کند و آن را برای بازیابی سریع اطلاعات از مخازن اسناد بزرگ مناسب می کند. +* **وزن های سفارشی کلمه کلیدی و معنایی شناسی** + + علاوه بر فعال کردن فقط حالت های بازیابی معنایی شناسی یا کلمه کلیدی، وزن امتیاز سفارشی انعطاف پذیر را ارائه می دهیم. شما می توانید با تنظیم مداوم وزن هر دو، بهترین نسبت وزن را برای سناریوی تجاری خود تعیین کنید. + +**مدل دوباره مرتب سازی** + +مدل دوباره مرتب سازی یک سیستم امتیازدهی خارجی است که امتیاز مرتبط بودن بین سوال کاربر و هر سند کاندید ارائه شده را محاسبه می کند و نتایج رتبه بندی معنایی را بهبود می بخشد و لیستی از اسناد را بر اساس مرتبط بودن از بالا به پایین مرتب می کند. + +در حالی که این روش هزینه های اضافی را به همراه دارد، اما در مدیریت محتوای پیچیده پایگاه دانش، مانند محتوایی که پرس و جوهای معنایی و تطبیق کلمات کلیدی را ترکیب می کند، یا مواردی که شامل محتوای بازگردانده شده چند زبانه است، مهارت بیشتری دارد. + +> برای کسب اطلاعات بیشتر در مورد [دوباره مرتب سازی](https://docs.dify.ai/learn-more/extended-reading/retrieval-augment/rerank) کلیک کنید. + +Dify در حال حاضر از چندین مدل دوباره مرتب سازی پشتیبانی می کند. برای استفاده از مدل های دوباره مرتب سازی خارجی، باید یک کلید API ارائه دهید. کلید API را برای مدل دوباره مرتب سازی (مانند Cohere، Jina AI، و غیره) در صفحه "ارائه کننده مدل" وارد کنید. + +

پیکربندی مدل دوباره مرتب سازی در ارائه دهنده مدل

+ +**پارامترهای قابل تنظیم** + +* **TopK** + + این پارامتر بخش های متنی را که بیشترین شباهت را به سوال کاربر دارند، فیلتر می کند. این سیستم به طور پویا تعداد بخش ها را بر اساس اندازه پنجره متن مدل انتخاب شده تنظیم می کند. یک مقدار بالاتر منجر به یادآوری بخش های متنی بیشتر می شود. +* **آستانه امتیاز** + + این پارامتر آستانه شباهت را برای فیلتر کردن بخش های متنی ایجاد می کند. فقط آن بخش هایی که دارای امتیاز شباهت بازیابی برداری بیش از آستانه تعیین شده هستند، یادآوری می شوند. یک مقدار آستانه بالاتر منجر به یادآوری متن های کمتری می شود، اما آن هایی که یادآوری می شوند، احتمالاً مرتبط تر هستند. این پارامتر را بر اساس نیازهای خاص خود برای دقت در مقابل یادآوری تنظیم کنید. + +حالت چند یادآوری می تواند نتایج یادآوری با کیفیت بالاتری را هنگام بازیابی از چندین پایگاه دانش به دست آورد؛ بنابراین، **توصیه می شود حالت یادآوری را به چند یادآوری تنظیم کنید**. + +### سوالات متداول + +1. **چگونه باید تنظیمات دوباره مرتب سازی را در حالت چند یادآوری انتخاب کنم؟** + +اگر کاربران اطلاعات یا اصطلاحات دقیق را می دانند و بازیابی کلمه کلیدی می تواند به طور دقیق نتایج تطبیق را ارائه دهد، **کلمه کلیدی را به 1** در "وزن امتیاز" تنظیم کنید. + +اگر واژگان دقیق در پایگاه دانش ظاهر نشود، یا اگر پرس و جوهای چند زبانه وجود داشته باشد، توصیه می شود **تنظیم معنایی شناسی را به 1** در "وزن امتیاز" تنظیم کنید. + +اگر کارکنان تجاری با سناریوهای پرس و جو واقعی کاربران آشنا هستند و می خواهند نسبت معنایی شناسی یا کلمات کلیدی را به طور فعال تنظیم کنند، توصیه می شود نسبت را خودتان در "وزن امتیاز" تنظیم کنید. + +اگر محتوای موجود در پایگاه دانش پیچیده است و نمی توان با شرایط ساده مانند معنایی شناسی یا کلمات کلیدی با آن مطابقت داشت، در حالی که به پاسخ های دقیق نیاز دارید، و اگر مایل به متحمل هزینه های اضافی هستید، توصیه می شود از **مدل دوباره مرتب سازی** برای بازیابی محتوا استفاده کنید. + +2. **اگر در یافتن "وزن امتیاز" یا نیاز به پیکربندی مدل دوباره مرتب سازی با مشکل مواجه شدم چه باید بکنم؟** + +در اینجا نحوه تاثیر روش بازیابی پایگاه دانش بر بازیابی چند مسیر آمده است: + +
+ +3. **اگر نتوانم "وزن امتیاز" را هنگام مراجعه به چندین پایگاه دانش تنظیم کنم و یک پیام خطا ظاهر شود چه باید بکنم؟** + +این مشکل به این دلیل رخ می دهد که مدل های Embedding مورد استفاده در چندین پایگاه دانش ارجاع داده شده ناسازگار هستند و این اطلاع رسانی برای جلوگیری از تضاد در محتوای بازیابی شده، صادر می شود. توصیه می شود مدل دوباره مرتب سازی را در "ارائه دهنده مدل" تنظیم و فعال کنید یا تنظیمات بازیابی پایگاه های دانش را یکسان کنید. + +4. **چرا نمی توانم گزینه "وزن امتیاز" را در حالت چند یادآوری پیدا کنم و فقط مدل دوباره مرتب سازی را می بینم؟** + +لطفا بررسی کنید که آیا پایگاه دانش شما از حالت شاخص "اقتصادی" استفاده می کند یا خیر. در این صورت، آن را به حالت شاخص "با کیفیت بالا" تغییر دهید. + + diff --git a/fa/guides/knowledge-base/knowledge-and-documents-maintenance.md b/fa/guides/knowledge-base/knowledge-and-documents-maintenance.md new file mode 100644 index 000000000..2739d0f7a --- /dev/null +++ b/fa/guides/knowledge-base/knowledge-and-documents-maintenance.md @@ -0,0 +1,121 @@ +# پایگاه دانش و نگهداری اسناد + +## مدیریت پایگاه دانش + +> صفحه پایگاه دانش فقط برای مالک تیم، مدیران تیم و کاربران با مجوز ویرایشگر قابل دسترسی است. + +در صفحه اصلی تیم Dify، روی تب "پایگاه دانش" در بالا کلیک کنید، پایگاه دانشی را که می خواهید مدیریت کنید انتخاب کنید، سپس روی **تنظیمات** در پنل ناوبری سمت چپ کلیک کنید تا تنظیمات را انجام دهید. می‌توانید نام پایگاه دانش، توضیحات، مجوزهای دسترسی، حالت نمایه سازی، مدل تعبیه و تنظیمات بازیابی را تغییر دهید. + +

تنظیمات پایگاه دانش

+ +**نام پایگاه دانش**: برای تمایز بین پایگاه‌های دانش مختلف استفاده می‌شود. + +**توضیحات پایگاه دانش**: برای شرح اطلاعات ارائه شده در اسناد موجود در پایگاه دانش استفاده می‌شود. + +**مجوزهای دسترسی**: کنترل دسترسی را برای پایگاه دانش با سه سطح تعریف می‌کند: + +1. **"فقط من"**: دسترسی را به مالک پایگاه دانش محدود می‌کند. +2. **"تمام اعضای تیم"**: دسترسی به همه اعضای تیم را می‌دهد. +3. **"اعضای جزئی تیم"**: دسترسی انتخابی به اعضای خاص تیم را مجاز می‌کند. + +کاربران بدون مجوز مناسب، نمی‌توانند به پایگاه دانش دسترسی داشته باشند. هنگام اعطای دسترسی به اعضای تیم (گزینه‌های 2 یا 3)، کاربران مجاز مجوزهای کامل، از جمله مشاهده، ویرایش و حذف حقوق برای محتوای پایگاه دانش را دریافت می‌کنند. + +**حالت نمایه سازی**: برای توضیحات دقیق‌تر، لطفاً [به مستندات مراجعه کنید](https://docs.dify.ai/guides/knowledge-base/create-knowledge-and-upload-documents#5-indexing-method). + +**مدل تعبیه**: به شما امکان می‌دهد تا مدل تعبیه را برای پایگاه دانش تغییر دهید. تغییر مدل تعبیه، همه اسناد در پایگاه دانش را مجدداً تعبیه می‌کند و تعبیه‌های اصلی حذف می‌شوند. + +**تنظیمات بازیابی**: برای توضیحات دقیق‌تر، لطفاً [به مستندات مراجعه کنید](https://docs.dify.ai/guides/knowledge-base/create-knowledge-and-upload-documents#6-retrieval-settings). + +*** + +### مدیریت API پایگاه دانش + +پایگاه دانش Dify یک مجموعه کامل از API‌های استاندارد را ارائه می‌دهد. توسعه‌دهندگان می‌توانند از فراخوانی‌های API برای انجام عملیات روزانه مدیریت و نگهداری مانند اضافه کردن، حذف، اصلاح و پرس و جو اسناد و بخش‌ها در پایگاه دانش استفاده کنند. لطفاً به [مستندات API پایگاه دانش](maintain-dataset-via-api.md) مراجعه کنید. + +

مدیریت API پایگاه دانش

+ +## نگهداری متن در پایگاه دانش + +### مشاهده بخش‌های متن + +هر سند آپلود شده در پایگاه دانش به شکل بخش‌های متن ذخیره می‌شود. می‌توانید محتوای متنی خاص هر بخش را در لیست بخش‌ها مشاهده کنید. + +

مشاهده بخش‌های سند آپلود شده

+ +*** + +### بررسی کیفیت بخش + +کیفیت بخش‌های سند، به طور قابل توجهی بر عملکرد Q\&A برنامه کاربردی پایگاه دانش تأثیر می‌گذارد. توصیه می‌شود قبل از مرتبط کردن پایگاه دانش با برنامه، کیفیت بخش‌ها را به صورت دستی بررسی کنید. + +اگرچه روش‌های خودکار بخش بندی بر اساس طول کاراکتر، شناسه‌ها یا بخش بندی معنایی NLP می‌تواند به طور قابل توجهی حجم کار بخش بندی متن در مقیاس بزرگ را کاهش دهد، کیفیت بخش به ساختار متنی فرمت‌های مختلف سند و زمینه معنایی مرتبط است. بررسی و تصحیح دستی می‌تواند به طور موثر کمبودهای بخش بندی ماشینی در تشخیص معنایی را جبران کند. + +هنگام بررسی کیفیت بخش، به موارد زیر توجه کنید: + +* **بخش‌های متن بیش از حد کوتاه**: منجر به از دست رفتن معنایی می‌شود. + +

بخش‌های متن بیش از حد کوتاه

+ +* **بخش‌های متن بیش از حد طولانی**: منجر به نویز معنایی می‌شود که بر دقت تطبیق تأثیر می‌گذارد. + +

بخش‌های متن بیش از حد طولانی

+ +* **قطع معنایی آشکار**: این اتفاق زمانی می‌افتد که از حد مجاز طول بخش استفاده می‌شود و منجر به قطع معنایی اجباری و از دست دادن محتوا در طول فراخوانی می‌شود. + +

قطع معنایی آشکار

+ +*** + +### اضافه کردن بخش‌های متن + +در لیست بخش‌ها، روی "اضافه کردن بخش" کلیک کنید تا یک یا چند بخش سفارشی به سند اضافه کنید. + +
+ +اضافه کردن بخش + +هنگام اضافه کردن بخش‌ها به صورت انبوه، باید ابتدا قالب آپلود بخش به فرمت CSV را دانلود کنید، تمام محتوای بخش را در اکسل مطابق با فرمت قالب ویرایش کنید، فایل CSV را ذخیره کنید و سپس آن را آپلود کنید. + +

اضافه کردن بخش‌های سفارشی به صورت انبوه

+ +*** + +### ویرایش بخش‌های متن + +در لیست بخش‌ها، می‌توانید محتوای بخش‌های اضافه شده را به طور مستقیم ویرایش کنید، از جمله محتوای متنی و کلمات کلیدی بخش‌ها. + +

ویرایش بخش‌های سند

+ +*** + +### مدیریت متادیتا + +علاوه بر نشانه گذاری اطلاعات متادیتا از اسناد منبع مختلف، مانند عنوان، URL، کلمات کلیدی و توضیحات داده‌های وب، متادیتا در فرآیند فراخوانی بخش پایگاه دانش به عنوان فیلدهای ساختار یافته برای فیلتر کردن فراخوانی یا نمایش منابع استناد استفاده می‌شود. + +{% hint style="info" %} +عملکردهای فیلتر کردن متادیتا و منبع استناد در نسخه فعلی پشتیبانی نمی‌شود. +{% endhint %} + +

اضافه کردن متادیتا

+ +*** + +### اضافه کردن اسناد + +در "پایگاه دانش > لیست اسناد"، روی "اضافه کردن فایل" کلیک کنید تا اسناد جدید یا [صفحات Notion](sync-from-notion.md) را به پایگاه دانش ایجاد شده آپلود کنید. + +یک پایگاه دانش (Knowledge) مجموعه‌ای از اسناد (Documents) است. اسناد می‌تواند توسط توسعه‌دهندگان یا اپراتورها آپلود شود، یا از منابع داده دیگر (معمولاً مربوط به یک واحد فایل در منبع داده) همگام سازی شود. + +

آپلود سند جدید در پایگاه دانش

+ +*** + +### غیرفعال کردن و بایگانی کردن اسناد + +**غیرفعال کردن**: مجموعه داده پشتیبانی از غیرفعال کردن اسناد یا بخش‌هایی که به طور موقت نباید نمایه شوند، را ارائه می‌دهد. در لیست اسناد مجموعه داده، روی دکمه غیرفعال کردن کلیک کنید تا سند را غیرفعال کنید. همچنین می‌توانید یک سند کامل یا یک بخش خاص در جزئیات سند را غیرفعال کنید. اسناد غیرفعال، نمایه نمی‌شوند. روی فعال کردن اسناد غیرفعال کلیک کنید تا وضعیت غیرفعال کردن لغو شود. + +**بایگانی**: داده‌های سند قدیمی که دیگر مورد استفاده نیستند، در صورت عدم تمایل به حذف، می‌توانند بایگانی شوند. داده‌های بایگانی شده فقط قابل مشاهده یا حذف هستند و قابل ویرایش نیستند. در لیست اسناد مجموعه داده، روی دکمه بایگانی کلیک کنید تا سند را بایگانی کنید. همچنین می‌توانید اسناد را در جزئیات سند بایگانی کنید. اسناد بایگانی شده، نمایه نمی‌شوند. اسناد بایگانی شده همچنین می‌توانند از بایگانی خارج شوند. + +*** + + diff --git a/fa/guides/knowledge-base/maintain-dataset-via-api.md b/fa/guides/knowledge-base/maintain-dataset-via-api.md new file mode 100644 index 000000000..38a58dffa --- /dev/null +++ b/fa/guides/knowledge-base/maintain-dataset-via-api.md @@ -0,0 +1,550 @@ +# نگهداری پایگاه دانش از طریق API + +> روش‌های احراز هویت و فراخوانی برای API پایگاه دانش با API سرویس‌های کاربردی سازگار است. با این حال، یک توکن API واحد برای پایگاه دانش که تولید می‌شود، مجوز انجام عملیات بر روی تمام پایگاه‌های دانش قابل‌مشاهده تحت همان حساب را دارد. لطفاً به امنیت داده‌ها توجه کنید. + +### مزایای استفاده از API پایگاه دانش + +استفاده از API برای نگهداری پایگاه دانش به طور قابل‌توجهی راندمان پردازش داده‌ها را افزایش می‌دهد. این API امکان همگام‌سازی یکپارچه داده‌ها از طریق واسط‌های خط فرمان را فراهم می‌کند و عملیات‌های خودکار را به جای دستکاری رابط کاربری تسهیل می‌کند. + +مزایای کلیدی شامل: + +* **همگام‌سازی خودکار:** امکان ادغام یکپارچه بین سیستم‌های داده‌ای و پایگاه دانش Dify را فراهم می‌کند و ساخت گردش کار کارآمد را تسهیل می‌کند. +* **مدیریت جامع:** امکاناتی مانند لیست کردن پایگاه دانش، شمارش اسناد و پرس‌و‌جوهای دقیق را ارائه می‌دهد و توسعه رابط‌های سفارشی برای مدیریت داده‌ها را تسهیل می‌کند. +* **ورود محتوای انعطاف‌پذیر:** هم روش‌های متن ساده و هم آپلود فایل را در خود جای می‌دهد و از عملیات دسته جمعی برای اضافه و اصلاح تکه‌های محتوا پشتیبانی می‌کند. +* **افزایش بهره‌وری:** نیاز به دستکاری دستی داده‌ها را به حداقل می‌رساند و در نتیجه تجربه کلی کاربر در پلتفرم Dify را بهینه می‌کند. + +### نحوه استفاده + +به صفحه پایگاه دانش بروید و می‌توانید از طریق ناوبری سمت چپ به صفحه **دسترسی به API** بروید. در این صفحه می‌توانید مستندات API مجموعه داده ارائه شده توسط Dify را مشاهده کنید و اعتبارنامه‌های دسترسی به API مجموعه داده را در **کلیدهای API** مدیریت کنید. + +

مستندات API دانش

+ +### نمونه‌های درخواست API + +**ایجاد یک سند از متن** + +این API مبتنی بر یک دانش موجود است و یک سند جدید از طریق متن بر اساس این دانش ایجاد می‌کند. + +نمونه درخواست: + +```json +curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_text' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' \ +--data-raw '{"name": "text","text": "text","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}' +``` + +نمونه پاسخ: + +```json +{ + "document": { + "id": "", + "position": 1, + "data_source_type": "upload_file", + "data_source_info": { + "upload_file_id": "" + }, + "dataset_process_rule_id": "", + "name": "text.txt", + "created_from": "api", + "created_by": "", + "created_at": 1695690280, + "tokens": 0, + "indexing_status": "waiting", + "error": null, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "archived": false, + "display_status": "queuing", + "word_count": 0, + "hit_count": 0, + "doc_form": "text_model" + }, + "batch": "" +} +``` + +#### ایجاد اسناد از فایل‌ها + +این API مبتنی بر یک دانش موجود است و یک سند جدید از طریق فایل بر اساس این دانش ایجاد می‌کند. + +نمونه درخواست: + +```json +curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_file' \ +--header 'Authorization: Bearer {api_key}' \ +--form 'data="{"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"' +``` + +نمونه پاسخ: + +```json +{ + "document": { + "id": "", + "position": 1, + "data_source_type": "upload_file", + "data_source_info": { + "upload_file_id": "" + }, + "dataset_process_rule_id": "", + "name": "Dify.txt", + "created_from": "api", + "created_by": "", + "created_at": 1695308667, + "tokens": 0, + "indexing_status": "waiting", + "error": null, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "archived": false, + "display_status": "queuing", + "word_count": 0, + "hit_count": 0, + "doc_form": "text_model" + }, + "batch": "" +} + +``` + +#### ایجاد یک دانش خالی + +{% hint style="warning" %} +فقط برای ایجاد یک پایگاه دانش خالی استفاده می‌شود. +{% endhint %} + +نمونه درخواست: + +```bash +curl --location --request POST 'https://api.dify.ai/v1/datasets' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' \ +--data-raw '{"name": "name", "permission": "only_me"}' +``` + +نمونه پاسخ: + +```json +{ + "id": "", + "name": "name", + "description": null, + "provider": "vendor", + "permission": "only_me", + "data_source_type": null, + "indexing_technique": null, + "app_count": 0, + "document_count": 0, + "word_count": 0, + "created_by": "", + "created_at": 1695636173, + "updated_by": "", + "updated_at": 1695636173, + "embedding_model": null, + "embedding_model_provider": null, + "embedding_available": null +} +``` + +#### لیست دانش + +نمونه درخواست: + +```bash +curl --location --request GET 'https://api.dify.ai/v1/datasets?page=1&limit=20' \ +--header 'Authorization: Bearer {api_key}' +``` + +نمونه پاسخ: + +```json +{ + "data": [ + { + "id": "", + "name": "name", + "description": "desc", + "permission": "only_me", + "data_source_type": "upload_file", + "indexing_technique": "", + "app_count": 2, + "document_count": 10, + "word_count": 1200, + "created_by": "", + "created_at": "", + "updated_by": "", + "updated_at": "" + }, + ... + ], + "has_more": true, + "limit": 20, + "total": 50, + "page": 1 +} + +``` + +#### حذف دانش + +نمونه درخواست: + +```json +curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}' \ +--header 'Authorization: Bearer {api_key}' +``` + +نمونه پاسخ: + +```json +204 No Content +``` + +#### به‌روزرسانی سند از طریق متن + +این API مبتنی بر یک دانش موجود است و سند را از طریق متن بر اساس این دانش به‌روزرسانی می‌کند. + +نمونه درخواست: + +```bash +curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/update_by_text' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' \ +--data-raw '{"name": "name","text": "text"}' +``` + +نمونه پاسخ: + +```json +{ + "document": { + "id": "", + "position": 1, + "data_source_type": "upload_file", + "data_source_info": { + "upload_file_id": "" + }, + "dataset_process_rule_id": "", + "name": "name.txt", + "created_from": "api", + "created_by": "", + "created_at": 1695308667, + "tokens": 0, + "indexing_status": "waiting", + "error": null, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "archived": false, + "display_status": "queuing", + "word_count": 0, + "hit_count": 0, + "doc_form": "text_model" + }, + "batch": "" +} +``` + +#### به‌روزرسانی یک سند از یک فایل + +این API مبتنی بر یک دانش موجود است و اسناد را از طریق فایل‌ها بر اساس این دانش به‌روزرسانی می‌کند. + +نمونه درخواست: + +```bash +curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/update_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"' +``` + +نمونه پاسخ: + +```json +{ + "document": { + "id": "", + "position": 1, + "data_source_type": "upload_file", + "data_source_info": { + "upload_file_id": "" + }, + "dataset_process_rule_id": "", + "name": "Dify.txt", + "created_from": "api", + "created_by": "", + "created_at": 1695308667, + "tokens": 0, + "indexing_status": "waiting", + "error": null, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "archived": false, + "display_status": "queuing", + "word_count": 0, + "hit_count": 0, + "doc_form": "text_model" + }, + "batch": "20230921150427533684" +} +``` + +#### دریافت وضعیت جاسازی سند (پیشرفت) + +نمونه درخواست: + +```bash +curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{batch}/indexing-status' \ +--header 'Authorization: Bearer {api_key}' +``` + +نمونه پاسخ: + +```json +{ + "data":[{ + "id": "", + "indexing_status": "indexing", + "processing_started_at": 1681623462.0, + "parsing_completed_at": 1681623462.0, + "cleaning_completed_at": 1681623462.0, + "splitting_completed_at": 1681623462.0, + "completed_at": null, + "paused_at": null, + "error": null, + "stopped_at": null, + "completed_segments": 24, + "total_segments": 100 + }] +} +``` + +#### حذف سند + +نمونه درخواست: + +```bash +curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}' \ +--header 'Authorization: Bearer {api_key}' +``` + +نمونه پاسخ: + +```bash +{ + "result": "success" +} +``` + +#### لیست اسناد دانش + +نمونه درخواست: + +```bash +curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents' \ +--header 'Authorization: Bearer {api_key}' +``` + +نمونه پاسخ: + +```json +{ + "data": [ + { + "id": "", + "position": 1, + "data_source_type": "file_upload", + "data_source_info": null, + "dataset_process_rule_id": null, + "name": "dify", + "created_from": "", + "created_by": "", + "created_at": 1681623639, + "tokens": 0, + "indexing_status": "waiting", + "error": null, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "archived": false + }, + ], + "has_more": false, + "limit": 20, + "total": 9, + "page": 1 +} +``` + +#### اضافه کردن تکه + +نمونه درخواست: + +```bash +curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' \ +--data-raw '{"segments": [{"content": "1","answer": "1","keywords": ["a"]}]}' +``` + +نمونه پاسخ: + +```json +{ + "data": [{ + "id": "", + "position": 1, + "document_id": "", + "content": "1", + "answer": "1", + "word_count": 25, + "tokens": 0, + "keywords": [ + "a" + ], + "index_node_id": "", + "index_node_hash": "", + "hit_count": 0, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "status": "completed", + "created_by": "", + "created_at": 1695312007, + "indexing_at": 1695312007, + "completed_at": 1695312007, + "error": null, + "stopped_at": null + }], + "doc_form": "text_model" +} + +``` + +### دریافت تکه‌های اسناد + +نمونه درخواست: + +```bash +curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' +``` + +نمونه پاسخ: + +```bash +{ + "data": [{ + "id": "", + "position": 1, + "document_id": "", + "content": "1", + "answer": "1", + "word_count": 25, + "tokens": 0, + "keywords": [ + "a" + ], + "index_node_id": "", + "index_node_hash": "", + "hit_count": 0, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "status": "completed", + "created_by": "", + "created_at": 1695312007, + "indexing_at": 1695312007, + "completed_at": 1695312007, + "error": null, + "stopped_at": null + }], + "doc_form": "text_model" +} +``` + +### حذف تکه سند + +نمونه درخواست: + +```bash +curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json' +``` + +نمونه پاسخ: + +```bash +{ + "result": "success" +} +``` + +### به‌روزرسانی تکه سند + +نمونه درخواست: + +```bash +curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \ +--header 'Authorization: Bearer {api_key}' \ +--header 'Content-Type: application/json'\ +--data-raw '{"segment": {"content": "1","answer": "1", "keywords": ["a"], "enabled": false}}' +``` + +نمونه پاسخ: + +```bash +{ + "data": [{ + "id": "", + "position": 1, + "document_id": "", + "content": "1", + "answer": "1", + "word_count": 25, + "tokens": 0, + "keywords": [ + "a" + ], + "index_node_id": "", + "index_node_hash": "", + "hit_count": 0, + "enabled": true, + "disabled_at": null, + "disabled_by": null, + "status": "completed", + "created_by": "", + "created_at": 1695312007, + "indexing_at": 1695312007, + "completed_at": 1695312007, + "error": null, + "stopped_at": null + }], + "doc_form": "text_model" +} +``` + +### پیام خطا + +| کد | وضعیت | پیام | +| ----------------------------- | ------ | -------------------------------------------------------------------------------------------- | +| no\_file\_uploaded | 400 | لطفا فایل خود را آپلود کنید. | +| too\_many\_files | 400 | فقط یک فایل مجاز است. | +| file\_too\_large | 413 | اندازه فایل از حد مجاز بیشتر است. | +| unsupported\_file\_type | 415 | نوع فایل مجاز نیست. فرمت‌های پشتیبانی شده: txt, markdown, md, pdf, html, html, xlsx, docx, csv | +| high\_quality\_dataset\_only | 400 | عملیات فعلی فقط از مجموعه داده‌های "با کیفیت بالا" پشتیبانی می‌کند. | +| dataset\_not\_initialized | 400 | مجموعه داده هنوز در حال راه‌اندازی یا نمایه سازی است. لطفا لحظه ای صبر کنید. | +| archived\_document\_immutable | 403 | سند بایگانی شده قابل ویرایش نیست. | +| dataset\_name\_duplicate | 409 | نام مجموعه داده از قبل وجود دارد. لطفا نام مجموعه داده خود را تغییر دهید. | +| invalid\_action | 400 | عمل نامعتبر. | +| document\_already\_finished | 400 | سند پردازش شده است. لطفا صفحه را تازه کنید یا به جزئیات سند بروید. | +| document\_indexing | 400 | سند در حال پردازش است و قابل ویرایش نیست. | +| invalid\_metadata | 400 | محتوای متاداده نادرست است. لطفا بررسی و تأیید کنید. | diff --git a/fa/guides/knowledge-base/retrieval-test-and-citation.md b/fa/guides/knowledge-base/retrieval-test-and-citation.md new file mode 100644 index 000000000..adc048bb7 --- /dev/null +++ b/fa/guides/knowledge-base/retrieval-test-and-citation.md @@ -0,0 +1,34 @@ +# تست بازیابی/نقل قول + +### ۱. تست بازیابی + +پایگاه دانش دیفای، ویژگی تست بازیابی متن را برای اشکال زدایی تأثیرات یادآوری تحت روش‌های مختلف بازیابی و پیکربندی پارامترها ارائه می‌دهد. می‌توانید سوالات متداول کاربران را در کادر ورودی **متن منبع** وارد کنید، روی **تست** کلیک کنید و نتایج یادآوری را در بخش **پارگراف‌های بازیابی شده** در سمت راست مشاهده کنید. بخش **پرس و جوهای اخیر** به شما امکان می‌دهد تاریخچه سوابق پرس و جو را مشاهده کنید؛ اگر پایگاه دانش به یک برنامه متصل باشد، پرس و جوهایی که از داخل برنامه فعال شده‌اند نیز در اینجا قابل مشاهده هستند. + +

تست یادآوری

+ +با کلیک کردن روی نماد در گوشه بالا سمت راست کادر ورودی متن منبع، می‌توانید روش بازیابی و پارامترهای خاص پایگاه دانش فعلی را تغییر دهید. **تغییرات فقط در طول فرآیند تست یادآوری اعمال می‌شوند.** پس از اتمام تست یادآوری و تأیید تغییرات پارامترهای بازیابی پایگاه دانش، باید تغییراتی در [تنظیمات پایگاه دانش > تنظیمات بازیابی](create-knowledge-and-upload-documents/#id-6-retrieval-settings) ایجاد کنید. + +

تنظیمات بازیابی

+ +**مراحل پیشنهادی برای تست یادآوری:** + +1. طراحی و سازماندهی موارد تست/ مجموعه سوالات تست که سوالات متداول کاربران را پوشش می‌دهند. +2. انتخاب یک استراتژی بازیابی مناسب: جستجوی برداری/جستجوی متن کامل/جستجوی ترکیبی. برای مزایا و معایب روش‌های مختلف بازیابی، لطفاً به مطالعه بیشتر [تولید تقویت شده با بازیابی (RAG)](../../learn-more/extended-reading/retrieval-augment/) مراجعه کنید. +3. عیب یابی تعداد بخش‌های یادآوری (TopK) و آستانه نمره یادآوری (Score). ترکیبات پارامتر مناسب را بر اساس سناریو برنامه، از جمله کیفیت خود اسناد، انتخاب کنید. + +**نحوه تنظیم مقدار TopK و آستانه یادآوری (Score)** + +* **TopK حداکثر تعداد بخش‌های یادآوری را هنگام مرتب‌سازی به ترتیب نزولی نمره‌های شباهت نشان می‌دهد.** یک مقدار TopK کوچکتر، بخش‌های کمتری را یادآوری می‌کند که ممکن است منجر به یادآوری ناقص متون مرتبط شود؛ یک مقدار TopK بزرگتر، بخش‌های بیشتری را یادآوری می‌کند که ممکن است منجر به یادآوری بخش‌هایی با ارتباط معنایی کمتر شود و کیفیت پاسخ‌های LLM را کاهش دهد. +* **آستانه یادآوری (Score) حداقل نمره شباهت مجاز برای بخش‌های یادآوری را نشان می‌دهد.** یک نمره یادآوری کوچکتر، بخش‌های بیشتری را یادآوری می‌کند که ممکن است منجر به یادآوری بخش‌هایی با ارتباط کمتر شود؛ یک آستانه نمره یادآوری بزرگتر، بخش‌های کمتری را یادآوری می‌کند و اگر خیلی بزرگ باشد، ممکن است منجر به از دست دادن بخش‌های مرتبط شود. + +*** + +### ۲. نقل قول و نسبت دادن + +هنگام تست اثر پایگاه دانش در برنامه، می‌توانید به **فضای کاری -- افزودن تابع -- نسبت دادن نقل قول** بروید تا ویژگی نسبت دادن نقل قول را فعال کنید. + +

فعال کردن ویژگی نسبت دادن نقل قول

+ +پس از فعال کردن این ویژگی، وقتی مدل زبان بزرگ به یک سوال با استناد به محتوای پایگاه دانش پاسخ می‌دهد، می‌توانید اطلاعات خاص پاراگراف نقل قول را در زیر محتوای پاسخ مشاهده کنید، از جمله **متن بخش اصلی، شماره بخش، درجه تطبیق** و غیره. کلیک روی **پریدن به پایگاه دانش** در بالای بخش نقل قول شده، دسترسی سریع به لیست بخش‌ها در پایگاه دانش را امکان‌پذیر می‌کند و توسعه دهندگان را در عیب یابی و ویرایش تسهیل می‌کند. + +

مشاهده اطلاعات نقل قول در محتوای پاسخ

diff --git a/fa/guides/knowledge-base/sync-from-notion.md b/fa/guides/knowledge-base/sync-from-notion.md new file mode 100644 index 000000000..ab03df2b5 --- /dev/null +++ b/fa/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

+ +### روش پیکربندی ادغام برای نسخه Community Edition Notion + +ادغام Notion را می‌توان به دو روش انجام داد: **ادغام داخلی** و **ادغام عمومی**. می‌توانید آن‌ها را در صورت نیاز در Dify پیکربندی کنید. برای تفاوت‌های خاص بین دو روش ادغام، لطفاً به [مستندات رسمی Notion](https://developers.notion.com/docs/authorization) مراجعه کنید. + +### 1. **استفاده از ادغام داخلی** + +ابتدا یک ادغام در صفحه تنظیمات ادغام [ایجاد ادغام](https://www.notion.so/my-integrations) ایجاد کنید. به طور پیش‌فرض، تمام ادغام‌ها به عنوان ادغام‌های داخلی شروع می‌شوند؛ ادغام‌های داخلی با فضای کاری که انتخاب می‌کنید مرتبط خواهد بود، بنابراین برای ایجاد ادغام، باید مالک فضای کاری باشید. + +مراحل خاص: + +روی دکمه **ادغام جدید** کلیک کنید. نوع آن به طور پیش‌فرض **داخلی** است (قابل تغییر نیست). فضایی که با آن مرتبط است را انتخاب کنید، نام ادغام را وارد کنید، یک لوگو بارگذاری کنید و روی **ارسال** کلیک کنید تا ادغام با موفقیت ایجاد شود. + +
+ +پس از ایجاد ادغام، می‌توانید تنظیمات آن را در صورت نیاز در تب Capabilities به‌روزرسانی کنید و روی دکمه **نمایش** در زیر Secrets کلیک کنید تا اسرار را کپی کنید. + +
+ +پس از کپی کردن، به کد منبع Dify بازگردید و متغیرهای محیط مربوطه را در فایل **.env** پیکربندی کنید. متغیرهای محیط به شرح زیر هستند: + +**NOTION\_INTEGRATION\_TYPE**=internal یا **NOTION\_INTEGRATION\_TYPE**=public + +**NOTION\_INTERNAL\_SECRET**=your-internal-secret + +### 2. **استفاده از ادغام عمومی** + +**شما باید ادغام داخلی را به یک ادغام عمومی ارتقا دهید.** به صفحه Distribution ادغام بروید و سوئیچ را برای عمومی کردن ادغام فعال کنید. هنگام تغییر به تنظیم عمومی، باید اطلاعات اضافی را در فرم اطلاعات سازمان در زیر پر کنید، از جمله نام شرکت، وب‌سایت و URL بازگردانی، سپس روی دکمه **ارسال** کلیک کنید. + +
+ +پس از موفقیت در عمومی کردن ادغام در صفحه تنظیمات ادغام، می‌توانید به کلید ادغام در تب Keys دسترسی پیدا کنید: + +
+ +به کد منبع Dify بازگردید و متغیرهای محیط مربوطه را در فایل **.env** پیکربندی کنید. متغیرهای محیط به شرح زیر هستند: + +* **NOTION\_INTEGRATION\_TYPE**=public +* **NOTION\_CLIENT\_SECRET**=your-client-secret +* **NOTION\_CLIENT\_ID**=your-client-id + +پس از پیکربندی، می‌توانید توابع واردات و همگام‌سازی داده‌های Notion را در مجموعه داده‌ها اجرا کنید. + + diff --git a/fa/guides/knowledge-base/sync-from-website.md b/fa/guides/knowledge-base/sync-from-website.md new file mode 100644 index 000000000..4dd445ab8 --- /dev/null +++ b/fa/guides/knowledge-base/sync-from-website.md @@ -0,0 +1,74 @@ +--- +description: >- + این سند در درجه اول به نحوه جمع‌آوری داده‌ها از یک صفحه وب، تجزیه آن به Markdown و وارد کردن آن به پایگاه دانش Dify می‌پردازد. +--- + +# همگام‌سازی داده‌ها از وب‌سایت + +پایگاه دانش Dify از خزش محتوا از صفحات وب عمومی با استفاده از ابزارهای شخص ثالث مانند [Jina Reader](https://jina.ai/reader/) و [Firecrawl](https://www.firecrawl.dev/)، تجزیه آن به محتوای Markdown و وارد کردن آن به پایگاه دانش پشتیبانی می‌کند. + +{% hint style="info" %} +​[Firecrawl](https://www.firecrawl.dev/) و [Jina Reader](https://jina.ai/reader/) هر دو ابزار تجزیه وب متن باز هستند که می‌توانند صفحات وب را به متن تمیز Markdown که برای LLM ها قابل تشخیص است، تبدیل کنند، در حالی که خدمات API آسان برای استفاده را ارائه می‌دهند. +{% endhint %} + +بخش‌های بعدی به ترتیب روش‌های استفاده برای Firecrawl و Jina Reader را معرفی می‌کنند. + +### Firecrawl + +#### **1. پیکربندی اعتبارنامه‌های API Firecrawl** + +روی آواتار در گوشه بالا سمت راست کلیک کنید، سپس به صفحه **DataSource** بروید و روی دکمه **Configure** در کنار Firecrawl کلیک کنید. + +

پیکربندی اعتبارنامه‌های Firecrawl

+ +برای تکمیل ثبت نام، به [وب سایت Firecrawl](https://www.firecrawl.dev/) وارد شوید، API Key خود را دریافت کنید و سپس آن را وارد کنید و در Dify ذخیره کنید. + +

API Key را دریافت کنید و آن را در Dify ذخیره کنید

+ +#### 2. خراشیدن صفحه وب هدف + +در صفحه ایجاد پایگاه دانش، **Sync from website** را انتخاب کنید، Firecrawl را به عنوان ارائه دهنده انتخاب کنید و URL هدف را برای خزش وارد کنید. + +

پیکربندی خراشیدن وب

+ +گزینه‌های پیکربندی شامل: آیا باید زیرصفحات را خزش کنید، محدودیت خزش صفحه، حداکثر عمق خراشیدن صفحه، مسیرهای حذف شده، شامل فقط مسیرها و دامنه استخراج محتوا. پس از تکمیل پیکربندی، روی **Run** کلیک کنید تا صفحات تجزیه شده را پیش‌نمایش کنید. + +

اجرای خراشیدن

+ +#### 3. بررسی نتایج واردات + +پس از وارد کردن متن تجزیه شده از صفحه وب، در اسناد پایگاه دانش ذخیره می‌شود. نتایج واردات را مشاهده کنید و روی **Add URL** کلیک کنید تا واردات صفحات وب جدید ادامه یابد. + +

وارد کردن متن وب تجزیه شده به پایگاه دانش

+ +*** + +### Jina Reader + +#### 1. پیکربندی اعتبارنامه‌های Jina Reader + +روی آواتار در گوشه بالا سمت راست کلیک کنید، سپس به صفحه **DataSource** بروید و روی دکمه **Configure** در کنار Jina Reader کلیک کنید. + +

پیکربندی Jina Reader

+ +به [وب سایت Jina Reader](https://jina.ai/reader/) وارد شوید، ثبت نام را کامل کنید، API Key را دریافت کنید، سپس آن را پر کنید و ذخیره کنید. + +

پر کردن پیکربندی Jina

+ +#### 2. استفاده از Jina Reader برای خزش محتوای وب + +در صفحه ایجاد پایگاه دانش، Sync from website را انتخاب کنید، Jina Reader را به عنوان ارائه دهنده انتخاب کنید و URL هدف را برای خزش وارد کنید. + +

پیکربندی خزش وب

+ +گزینه‌های پیکربندی شامل: آیا باید زیرصفحات را خزش کنید، حداکثر تعداد صفحات برای خزش و آیا باید از sitemap برای خزش استفاده کنید. پس از تکمیل پیکربندی، روی دکمه **Run** کلیک کنید تا پیوندهای صفحه ای که باید خزش شوند را پیش‌نمایش کنید. + +

اجرای خزش

+ +متن تجزیه شده را از صفحات وب وارد کنید و آن را در اسناد پایگاه دانش ذخیره کنید، سپس نتایج واردات را مشاهده کنید. برای ادامه اضافه کردن صفحات وب، روی دکمه Add URL در سمت راست کلیک کنید تا صفحات وب جدید وارد شوند. + +

وارد کردن متن وب تجزیه شده به پایگاه دانش

+ +پس از اتمام خزش، محتوای صفحات وب در پایگاه دانش ادغام خواهد شد. + + diff --git a/fa/guides/management/README.md b/fa/guides/management/README.md new file mode 100644 index 000000000..778dd1768 --- /dev/null +++ b/fa/guides/management/README.md @@ -0,0 +1 @@ +# مدیریت diff --git a/fa/guides/management/app-management.md b/fa/guides/management/app-management.md new file mode 100644 index 000000000..f967133b5 --- /dev/null +++ b/fa/guides/management/app-management.md @@ -0,0 +1,44 @@ +# مدیریت برنامه + +### ویرایش اطلاعات برنامه + +پس از ایجاد یک برنامه، اگر می خواهید نام یا توضیحات برنامه را تغییر دهید، می توانید در گوشه سمت چپ بالای برنامه، روی "ویرایش اطلاعات" کلیک کنید تا نماد، نام یا توضیحات برنامه را ویرایش کنید. + +

ویرایش اطلاعات برنامه

+ +### کپی کردن برنامه + +تمام برنامه ها از کپی کردن پشتیبانی می کنند. در گوشه سمت چپ بالای برنامه روی "کپی" کلیک کنید. + +### تغییر به Orchestrate گردش کار + +TODO 🚧 + +### صادر کردن برنامه + +برنامه های ایجاد شده در Dify از صادرات به صورت فایل های DSL پشتیبانی می کنند و به شما اجازه می دهند فایل های پیکربندی را به طور آزادانه به تیم های دیگر Dify وارد کنید. می توانید از هر دو روش زیر برای صادرات فایل های DSL استفاده کنید: + +* در صفحه "استودیو"، در دکمه منو برنامه روی "صادرات DSL" کلیک کنید +* پس از ورود به صفحه orchestration برنامه، در گوشه سمت چپ بالا روی "صادرات DSL" کلیک کنید + +![](../../.gitbook/assets/export-dsl.png) + +فایل DSL اطلاعات مجوز را که قبلاً در گره های [ابزار](../workflow/node/tools.md) پر شده است، مانند کلیدهای API برای سرویس های شخص ثالث، شامل نمی شود. + +اگر متغیرهای محیطی حاوی متغیرهایی از نوع `Secret` باشند، هنگام صادرات فایل، اعلان ظاهر می شود که از شما می پرسد آیا اجازه صادرات این اطلاعات حساس را می دهید یا خیر. + +![](../../.gitbook/assets/export-dsl-secret.png) + +{% hint style="info" %} +Dify DSL یک استاندارد فایل مهندسی برنامه AI است که توسط Dify.AI در نسخه 0.6 و بعد از آن تعریف شده است. قالب فایل YML است. این استاندارد توضیحات اساسی برنامه، پارامترهای مدل، پیکربندی orchestration و سایر اطلاعات را پوشش می دهد. +{% endhint %} + +### حذف برنامه + +اگر می خواهید برنامه ای را حذف کنید، می توانید در گوشه سمت چپ بالای برنامه روی "حذف" کلیک کنید. + +{% hint style="info" %} +⚠️ حذف یک برنامه قابل برگشت نیست. تمام کاربران قادر به دسترسی به برنامه شما نخواهند بود و تمام راهنمایی ها، پیکربندی های orchestration و لاگ های موجود در برنامه حذف می شوند. +{% endhint %} + + diff --git a/fa/guides/management/personal-account-management.md b/fa/guides/management/personal-account-management.md new file mode 100644 index 000000000..edfe16005 --- /dev/null +++ b/fa/guides/management/personal-account-management.md @@ -0,0 +1,51 @@ +# مدیریت حساب شخصی + +### تغییر اطلاعات شخصی + +برای به‌روزرسانی اطلاعات حساب شخصی خود: + +1. به صفحه اصلی تیم Dify بروید. +2. روی آواتار خود در گوشه سمت راست بالا کلیک کنید. +3. **"حساب من"** را انتخاب کنید. + +می‌توانید جزئیات زیر را تغییر دهید: + +* آواتار +* نام کاربری +* ایمیل +* رمز عبور + +
+ +### ادغام‌ها + +می‌توانید حساب‌های GitHub و Google خود را به‌عنوان روش‌های ورود به سیستم برای تیم Dify خود پیوند دهید. روی آواتار خود در گوشه سمت راست بالای صفحه اصلی تیم Dify کلیک کنید، سپس برای تنظیم این پیوندها روی **"ادغام‌ها"** کلیک کنید. + +### تغییر زبان رابط کاربری + +برای تغییر زبان نمایش، روی آواتار خود در گوشه سمت راست بالای صفحه اصلی تیم Dify کلیک کنید، سپس روی **"زبان"** کلیک کنید. Dify از زبان‌های زیر پشتیبانی می‌کند: + +* انگلیسی +* چینی ساده +* چینی سنتی +* پرتغالی (برزیل) +* فرانسوی (فرانسه) +* ژاپنی (ژاپن) +* کره‌ای (کره جنوبی) +* روسی (روسیه) +* ایتالیایی (ایتالیا) +* تایلندی (تایلند) +* اندونزیایی +* اوکراینی (اوکراین) + +Dify از داوطلبان جامعه برای مشارکت در نسخه‌های زبان اضافی استقبال می‌کند. برای مشارکت، به [مخزن GitHub](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) مراجعه کنید! + +### حذف حساب شخصی + +با توجه به ملاحظات امنیتی داده‌های تیم، حذف خودکار آنلاین اطلاعات حساب شخصی در حال حاضر پشتیبانی نمی‌شود. اگر نیاز به حذف کامل حساب خود دارید، لطفاً اطلاعات زیر را در یک ایمیل قرار داده و آن را به support@dify.ai ارسال کنید. + +``` +Delete account: your-email +``` + +

حذف حساب شخصی

diff --git a/fa/guides/management/subscription-management.md b/fa/guides/management/subscription-management.md new file mode 100644 index 000000000..4841ce66c --- /dev/null +++ b/fa/guides/management/subscription-management.md @@ -0,0 +1,60 @@ +# مدیریت اشتراک + +### ارتقا اشتراک تیم Dify + +مالکان و مدیران تیم می توانند طرح اشتراک تیم را ارتقا دهند. روی دکمه **"ارتقا"** در گوشه سمت راست بالای صفحه اصلی تیم Dify کلیک کنید، یک بسته مناسب را انتخاب کنید و پرداخت را برای ارتقا اشتراک تیم تکمیل کنید. + +### مدیریت اشتراک تیم Dify + +پس از اشتراک در خدمات پولی Dify (طرح حرفه ای یا تیم)، مالکان و مدیران تیم می توانند به **"تنظیمات"** → **"حساب"** برای مدیریت جزئیات صورتحساب و اشتراک تیم مراجعه کنند. + +در صفحه صورتحساب، می توانید آمار استفاده از منابع مختلف تیم را مشاهده کنید. + +

مدیریت صورتحساب تیم

+ +### سوالات متداول + +#### 1. چگونه می توان طرح تیم را ارتقا داد/تنزل داد یا اشتراک را لغو کرد؟ + +مالکان و مدیران تیم می توانند به **تنظیمات** → **حساب** مراجعه کرده و روی **مدیریت صورتحساب و اشتراک** کلیک کنند تا طرح اشتراک را تغییر دهند. + +* ارتقا از طرح حرفه ای به طرح تیم نیاز به پرداخت مابه التفاوت برای ماه جاری دارد و بلافاصله اعمال می شود. +* تنزل از طرح تیم به طرح حرفه ای بلافاصله اعمال می شود. + +

تغییر طرح پولی

+ +با لغو طرح اشتراک، **تیم به طور خودکار در پایان چرخه صورتحساب فعلی به طرح Sandbox/رایگان منتقل خواهد شد.** پس از آن، هر عضوی از تیم و منابعی که محدودیت طرح Sandbox/رایگان را رعایت نمی کنند، غیرقابل دسترسی خواهد بود. + +#### 2. چه تغییراتی پس از ارتقا طرح اشتراک در منابع در دسترس تیم ایجاد خواهد شد؟ + +| منبع | رایگان | حرفه ای | تیم | +| ---------------------------------------------------------------------------- | --------- | ------------ | ------------- | +| محدودیت اعضای تیم | 1 | 3 | نامحدود | +| محدودیت برنامه | 10 | 50 | نامحدود | +| ظرفیت فضای برداری | 5MB | 200MB | 1GB | +| [پاسخ‌های علامت‌گذاری‌شده](https://docs.dify.ai/guides/biao-zhu/logs) برای برنامه‌ها | 10 | 2000 | 5000 | +| آپلود اسناد برای پایگاه دانش | 50 | 500 | 1000 | +| سهمیه مکالمات OpenAI | 200 در کل | 5000 در ماه | 10000 در ماه | + +نکته: + +* هنگام ارتقا از رایگان به حرفه ای، تمام منابع مطابق جدول افزایش می یابند. +* هنگام ارتقا از حرفه ای به تیم، منابع بیشتر گسترش می‌یابند و برخی از آن‌ها نامحدود می‌شوند. + +پس از ارتقا طرح اشتراک: + +* سهمیه مکالمات OpenAI برای چرخه صورتحساب فعلی به حد جدید تنظیم مجدد خواهد شد. +* منابع محاسباتی قبلاً استفاده شده (مانند استفاده از فضای برداری، آپلود اسناد) تنظیم مجدد یا حذف نمی شوند. + +#### 3. اگر تمدید اشتراک را به موقع فراموش کنم چه اتفاقی می افتد؟ + +اگر تمدید اشتراک خود را فراموش کنید، تیم به طور خودکار به نسخه Sandbox/رایگان تنزل پیدا می کند. به جز مالک تیم، سایرین نمی توانند به تیم ادامه دهند. منابع محاسباتی اضافی در تیم (مانند اسناد، فضای برداری و غیره) نیز قفل خواهند شد. + +#### 4. حذف حساب مالک تیم چه تاثیری بر تیم دارد؟ + +یک تیم باید به یک مالک تیم متصل باشد. اگر مالکیت تیم به موقع به عضو دیگری از تیم منتقل نشود، تمام داده های تیم فعلی همراه با حساب مالک حذف می شود. + +#### 5. تفاوت نسخه های اشتراک چیست؟ + +برای مقایسه دقیق ویژگی ها، لطفا به [قیمت گذاری Dify](https://dify.ai/pricing) مراجعه کنید. + diff --git a/fa/guides/management/team-members-management.md b/fa/guides/management/team-members-management.md new file mode 100644 index 000000000..933ef6353 --- /dev/null +++ b/fa/guides/management/team-members-management.md @@ -0,0 +1,64 @@ +# مدیریت اعضای تیم + +این راهنما نحوه مدیریت اعضای یک تیم Dify را توضیح می‌دهد. محدودیت تعداد اعضا برای نسخه‌های مختلف Dify در زیر آورده شده است. + +| Sandbox / Free | Professional | Team | Community | Enterprise | +| -------------- | ------------ | --------- | --------- | ---------- | +| 1 | 3 | Unlimited | Unlimited | Unlimited | + +### اضافه کردن اعضا + +{% hint style="info" %} +تنها مالکان تیم مجوز دعوت از اعضای تیم را دارند. +{% endhint %} + +برای اضافه کردن عضو، مالک تیم می‌تواند روی آواتار در گوشه بالا سمت راست کلیک کند، سپس **"اعضا"** → **"اضافه کردن"** را انتخاب کند. آدرس ایمیل را وارد کنید و مجوزهای عضو را برای تکمیل فرآیند اختصاص دهید. + +

اختصاص مجوزها به اعضای تیم

+ +اعضای دعوت شده می‌توانند ثبت‌نام خود را از طریق یک لینک URL یا دعوتنامه ایمیل کامل کنند. + +> برای نسخه Community Edition، فعال‌سازی قابلیت ایمیل نیاز به پیکربندی و فعال‌سازی سرویس ایمیل توسط مالک تیم از طریق [متغیرهای محیطی](https://docs.dify.ai/getting-started/install-self-hosted/environments) سیستم دارد. + +### مجوزهای عضو + +اعضای تیم به مالکان، مدیران، ویرایشگران و اعضای معمولی تقسیم می‌شوند. + +* **مالک** + * توضیحات نقش: اولین عضو تیم، با بالاترین سطح مجوز، مسئولیت کارکرد و مدیریت کل تیم را بر عهده دارد. + * نمای کلی مجوزها: مجوز مدیریت اعضای تیم، تنظیم مجوزهای عضو، تنظیم ارائه دهندگان مدل، ایجاد و حذف برنامه‌ها، ایجاد پایگاه‌های دانش، تنظیم کتابخانه‌های ابزار و غیره را دارد. +* **مدیر** + * توضیحات نقش: مدیر تیم، مسئول مدیریت اعضای تیم و ارائه دهندگان مدل. + * نمای کلی مجوزها: نمی‌تواند مجوزهای عضو را تنظیم کند؛ مجوز اضافه کردن یا حذف اعضای تیم، تنظیم ارائه دهندگان مدل، ایجاد، ویرایش و حذف برنامه‌ها، ایجاد پایگاه‌های دانش، تنظیم کتابخانه‌های ابزار و غیره را دارد. +* **ویرایشگر** + * توضیحات نقش: عضو معمولی تیم، مسئولیت ایجاد و ویرایش برنامه‌ها به صورت مشارکتی را بر عهده دارد. + * نمای کلی مجوزها: نمی‌تواند اعضای تیم را مدیریت کند، ارائه دهندگان مدل را تنظیم کند یا کتابخانه‌های ابزار را تنظیم کند؛ مجوز ایجاد، ویرایش و حذف برنامه‌ها، ایجاد پایگاه‌های دانش را دارد. +* **عضو** + * توضیحات نقش: عضو معمولی تیم، فقط مجاز به مشاهده و استفاده از برنامه‌هایی است که در داخل تیم ایجاد شده‌اند. + * نمای کلی مجوزها: فقط مجوز استفاده از برنامه‌های موجود در تیم و استفاده از ابزارها را دارد. + +### حذف اعضا + +{% hint style="info" %} +تنها مالکان تیم مجوز حذف اعضای تیم را دارند. +{% endhint %} + +برای حذف عضو، روی آواتار در گوشه بالا سمت راست صفحه اصلی تیم Dify کلیک کنید، به **"تنظیمات"** → **"اعضا"** بروید، عضوی را که می‌خواهید حذف کنید انتخاب کنید و **"حذف از تیم"** را کلیک کنید. + +

حذف عضو

+ +### سوالات متداول + +#### 1. چگونه می‌توان مالکیت تیم را انتقال داد؟ + +مالکان تیم بالاترین سطح مجوز را دارند. برای حفظ ثبات ساختار تیم، مالکیت تیم پس از تاسیس قابل انتقال دستی نیست. + +#### 2. چگونه می‌توان یک تیم را حذف کرد؟ + +به دلایل امنیتی داده‌های تیم، مالکان تیم نمی‌توانند به تنهایی تیم خود را حذف کنند. + +#### 3. چگونه می‌توان حساب یک عضو تیم را حذف کرد؟ + +نه مالکان تیم و نه مدیران می‌توانند حساب یک عضو تیم را حذف کنند. حذف حساب نیاز به درخواست فعالانه توسط صاحب حساب دارد و نمی‌توان توسط دیگران انجام شود. به عنوان جایگزین برای حذف حساب، حذف عضو از تیم دسترسی آن کاربر به تیم را لغو می‌کند. + + diff --git a/fa/guides/model-configuration/README.md b/fa/guides/model-configuration/README.md new file mode 100644 index 000000000..644f478d9 --- /dev/null +++ b/fa/guides/model-configuration/README.md @@ -0,0 +1,78 @@ +--- +description: درباره مدل‌های مختلف پشتیبانی شده توسط Dify بیاموزید. +--- + +# مدل + +Dify یک پلتفرم توسعه برای برنامه‌های هوش مصنوعی مبتنی بر LLM Apps است، وقتی برای اولین بار از Dify استفاده می‌کنید، باید به **تنظیمات --> ارائه دهنده‌های مدل** بروید تا LLM مورد استفاده خود را اضافه و پیکربندی کنید. + +

تنظیمات - ارائه دهنده مدل

+ +Dify از ارائه دهندگان مدل اصلی مانند سری GPT OpenAI و سری Claude Anthropic پشتیبانی می‌کند. قابلیت‌ها و پارامترهای هر مدل متفاوت است، بنابراین ارائه دهنده مدل مناسب برای نیازهای برنامه خود را انتخاب کنید. **قبل از استفاده از آن در Dify، کلید API را از وب سایت رسمی ارائه دهنده مدل دریافت کنید.** + +## انواع مدل در Dify + +Dify مدل‌ها را به 4 نوع طبقه‌بندی می‌کند که هر یک برای استفاده‌های مختلفی هستند: + +1. **مدل‌های استنباط سیستم:** در برنامه‌هایی برای وظایفی مانند چت، تولید نام و پیشنهاد سوالات بعدی استفاده می‌شود. + + > ارائه دهندگان شامل [OpenAI](https://platform.openai.com/account/api-keys) 、 [Azure OpenAI Service](https://azure.microsoft.com/en-us/products/ai-services/openai-service/) 、 [Anthropic](https://console.anthropic.com/account/keys) 、 Hugging Face Hub 、 Replicate 、 Xinference 、 OpenLLM 、 [iFLYTEK SPARK](https://www.xfyun.cn/solutions/xinghuoAPI) 、 [WENXINYIYAN](https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application) 、 [TONGYI](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) [Ollama](https://docs.dify.ai/tutorials/model-configuration/ollama) 、 [LocalAI](https://github.com/mudler/LocalAI) 、 . +2. **مدل‌های جاسازی:** برای جاسازی اسناد بخش بندی شده در دانش و پردازش پرس و جوهای کاربر در برنامه‌ها به کار می‌روند. + + > ارائه دهندگان شامل OpenAI، ZHIPU (ChatGLM)، Jina AI([Jina Embeddings](https://jina.ai/embeddings/)). +3. [**مدل‌های Rerank**](https://docs.dify.ai/advanced/retrieval-augment/rerank)**:** قابلیت‌های جستجو را در LLMs ارتقا می‌دهند. + + > ارائه دهندگان شامل Cohere، Jina AI([Jina Reranker](https://jina.ai/reranker)). +4. **مدل‌های گفتار به متن:** کلمات گفتاری را در برنامه‌های مکالمه‌ای به متن تبدیل می‌کنند. + + > ارائه دهنده: OpenAI. + +Dify قصد دارد با پیشرفت فناوری و نیازهای کاربران، ارائه دهندگان LLM بیشتری را اضافه کند. + +## خدمات آزمایشی مدل میزبانی شده + +Dify سهمیه‌های آزمایشی را برای کاربران خدمات ابری ارائه می‌دهد تا مدل‌های مختلف را آزمایش کنند. ارائه دهنده مدل خود را قبل از پایان آزمایش تنظیم کنید تا اطمینان حاصل شود که استفاده از برنامه شما بدون وقفه ادامه دارد. + +* آزمایش مدل میزبانی شده OpenAI: شامل 200 فراخوانی برای مدل‌هایی مانند GPT3.5-turbo، GPT3.5-turbo-16k، مدل‌های text-davinci-003 است. + +## تنظیم مدل پیش فرض + +Dify به طور خودکار مدل پیش فرض را براساس استفاده انتخاب می‌کند. این را در `تنظیمات > ارائه دهنده مدل` پیکربندی کنید. + +
+ +## تنظیمات ادغام مدل + +مدل خود را در `تنظیمات > ارائه دهنده مدل` Dify انتخاب کنید. + +
+ +ارائه دهندگان مدل به دو دسته تقسیم می‌شوند: + +1. مدل‌های اختصاصی: توسط ارائه دهندگانی مانند OpenAI و Anthropic توسعه یافته‌اند. +2. مدل‌های میزبانی شده: مدل‌های شخص ثالث را مانند Hugging Face و Replicate ارائه می‌دهند. + +روش‌های ادغام بین این دسته‌ها متفاوت است. + +**ارائه دهندگان مدل اختصاصی:** Dify به تمام مدل‌ها از یک ارائه دهنده یکپارچه متصل می‌شود. کلید API ارائه دهنده را در Dify تنظیم کنید تا ادغام انجام شود. + +{% hint style="info" %} +Dify از رمزگذاری [PKCS1_OAEP](https://pycryptodome.readthedocs.io/en/latest/src/cipher/oaep.html) برای محافظت از کلیدهای API شما استفاده می‌کند. هر کاربر (اجاره دهنده) یک جفت کلید منحصر به فرد برای رمزگذاری دارد که اطمینان حاصل می‌کند کلیدهای API شما محرمانه باقی می‌مانند. +{% endhint %} + +**ارائه دهندگان مدل میزبانی شده:** به صورت جداگانه با مدل‌های شخص ثالث ادغام کنید. + +روش‌های ادغام خاص در اینجا شرح داده نشده‌اند. + +* [Hugging Face](https://docs.dify.ai/advanced/model-configuration/hugging-face) +* [Replicate](https://docs.dify.ai/advanced/model-configuration/replicate) +* [Xinference](https://docs.dify.ai/advanced/model-configuration/xinference) +* [OpenLLM](https://docs.dify.ai/advanced/model-configuration/openllm) + +## استفاده از مدل‌ها + +پس از پیکربندی، این مدل‌ها برای استفاده از برنامه آماده هستند. + +
+ + diff --git a/fa/guides/model-configuration/customizable-model.md b/fa/guides/model-configuration/customizable-model.md new file mode 100644 index 000000000..e503592f6 --- /dev/null +++ b/fa/guides/model-configuration/customizable-model.md @@ -0,0 +1,302 @@ +# ادغام مدل سفارشی + +### مقدمه + +پس از تکمیل ادغام فروشنده، مرحله بعدی ادغام مدل ها در زیر فروشنده است. برای کمک به درک کل فرآیند ادغام، از `Xinference` به عنوان مثال استفاده خواهیم کرد تا به تدریج یک ادغام کامل فروشنده را انجام دهیم. + +لازم به ذکر است که برای مدل‌های سفارشی، هر ادغام مدل نیاز به یک اعتبار کامل فروشنده دارد. + +بر خلاف مدل های از پیش تعریف شده، ادغام فروشنده سفارشی همیشه دارای دو پارامتر زیر خواهد بود که نیازی به تعریف در فایل YAML فروشنده ندارند. + +![](../../.gitbook/assets/customizable-model.png) + +در بخش قبلی، یاد گرفتیم که فروشندگان نیازی به پیاده‌سازی `validate_provider_credential` ندارند. Runtime به طور خودکار `validate_credentials` لایه مدل مربوطه را بر اساس نوع مدل و نام مدل انتخاب شده توسط کاربر برای اعتبار سنجی فراخوانی می‌کند. + +#### نوشتن YAML فروشنده + +اولین قدم، تعیین نوع مدل‌های پشتیبانی شده توسط فروشنده است. + +انواع مدل‌های پشتیبانی شده در حال حاضر به شرح زیر هستند: + +* `llm` مدل تولید متن +* `text_embedding` مدل جاسازی متن +* `rerank` مدل باز رتبه‌بندی +* `speech2text` گفتار به متن +* `tts` متن به گفتار +* `moderation` 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 در زیر دایرکتوری پیاده‌سازی فروشنده مربوطه ذخیره می‌شوند. استراتژی زبان مشابه label است. + 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 یک فروشنده مستقر در سطح محلی است و مدل‌های از پیش تعریف شده ندارد، باید مدل‌های مورد نیاز را با توجه به مستندات Xinference مستقر کنید. بنابراین، در اینجا فقط مدل‌های سفارشی پشتیبانی می‌شوند. +- customizable-model +provider_credential_schema: + credential_form_schemas: +``` + +بعد، باید در نظر بگیریم که چه احراز هویتی برای تعریف یک مدل در Xinference لازم است. + +* این فروشنده از سه نوع مدل مختلف پشتیبانی می‌کند، بنابراین به `model_type` نیاز داریم تا نوع مدل را مشخص کنیم. این سه نوع دارد، بنابراین به شرح زیر می‌نویسیم: + +```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]: + """ + فراخوانی مدل زبان بزرگ + + :param model: نام مدل + :param credentials: اعتبارات مدل + :param prompt_messages: پیام‌های درخواست + :param model_parameters: پارامترهای مدل + :param tools: ابزارها برای فراخوانی ابزار + :param stop: کلمات توقف + :param stream: آیا پاسخ جریانی است + :param user: شناسه کاربری منحصر به فرد + :return: پاسخ کامل یا نتیجه تولید کننده قطعه پاسخ جریانی + """ + ``` + + هنگام پیاده‌سازی، توجه داشته باشید که باید از دو تابع برای بازگرداندن داده‌ها استفاده کنید، یکی برای رسیدگی به بازگشت همزمان و دیگری برای بازگشت جریانی. این به این دلیل است که پایتون توابع حاوی کلمه کلیدی `yield` را به عنوان توابع تولید کننده شناسایی می‌کند و نوع داده بازگشتی به `Generator` ثابت می‌شود. بنابراین، بازگشت همزمان و جریانی باید به طور جداگانه پیاده‌سازی شوند، همانطور که در زیر نشان داده شده است (توجه داشته باشید که این مثال از پارامترهای ساده شده استفاده می‌کند؛ پیاده‌سازی واقعی باید از لیست پارامترهای بالا پیروی کند): + + ```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: + """ + ``` + + گاهی اوقات، ممکن است نخواهید که مستقیماً 0 را برگردانید، بنابراین می‌توانید از `self._get_num_tokens_by_gpt2(text: str)` برای دریافت توکن‌های پیش محاسبه شده استفاده کنید. این روش در کلاس پایه `AIModel` قرار دارد و از Tokenizer GPT2 برای محاسبه استفاده می‌کند. با این حال، این روش فقط می‌تواند به عنوان یک روش جایگزین استفاده شود و کاملاً دقیق نیست. +* اعتبار سنجی اعتبارات مدل + + مشابه اعتبار سنجی اعتبارات فروشنده، این مورد برای اعتبار سنجی اعتبارات مدل منفرد است. + + ```python + def validate_credentials(self, model: str, credentials: dict) -> None: + """ + اعتبار سنجی اعتبارات مدل + + :param model: نام مدل + :param credentials: اعتبارات مدل + :return: + """ + ``` +* طرح پارامتر مدل + + بر خلاف انواع سفارشی، از آنجایی که پارامترهای پشتیبانی شده توسط یک مدل در فایل YAML تعریف نشده است، باید طرح پارامتر مدل را به طور پویا تولید کنیم. + + به عنوان مثال، Xinference از پارامترهای `max_tokens`، `temperature` و `top_p` پشتیبانی می‌کند. + + با این حال، برخی از فروشندگان از پارامترهای مختلفی بسته به مدل پشتیبانی می‌کنند. به عنوان مثال، فروشنده `OpenLLM` از `top_k` پشتیبانی می‌کند، اما همه مدل‌های ارائه شده توسط این فروشنده از `top_k` پشتیبانی نمی‌کنند. در اینجا، نشان می‌دهیم که Model A از `top_k` پشتیبانی می‌کند، در حالی که Model B این کار را انجام نمی‌دهد. بنابراین، باید طرح پارامتر مدل را به طور پویا تولید کنیم، همانطور که در زیر نشان داده شده است: + + ```python + def get_customizable_model_schema(self, model: str, credentials: dict) -> AIModelEntity | None: + """ + برای تعریف طرح مدل قابل تنظیم استفاده می‌شود + """ + 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' + ) + ) + ] + + # اگر model A باشد، top_k را به 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' + ) + ) + ) + + """ + برخی از کد‌های غیر مهم اینجا هستند + """ + + 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 + ``` +* جدول نگاشت خطاهای فراخوانی + + هنگامی که خطای فراخوانی مدل رخ می‌دهد، باید به نوع `InvokeError` مشخص شده توسط Runtime نگاشت شود تا پردازش‌های مختلف Dify برای خطاهای مختلف تسهیل شود. + + خطاهای Runtime: + + * `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/en_US/interfaces.md) مراجعه کنید. برای پیاده‌سازی‌های خاص، به: [llm.py](https://github.com/langgenius/dify-runtime/blob/main/lib/model_providers/anthropic/llm/llm.py) مراجعه کنید. + + diff --git a/fa/guides/model-configuration/interfaces.md b/fa/guides/model-configuration/interfaces.md new file mode 100644 index 000000000..934a8a966 --- /dev/null +++ b/fa/guides/model-configuration/interfaces.md @@ -0,0 +1,708 @@ +# روش‌های رابط کاربری + +این بخش روش‌های رابط کاربری و توضیحات پارامترها را شرح می‌دهد که باید توسط ارائه دهندگان و انواع مختلف مدل پیاده‌سازی شود. + +## ارائه دهنده + +کلاس پایه `__base.model_provider.ModelProvider` را به ارث ببرید و رابط‌های زیر را پیاده‌سازی کنید: + +```python +def validate_provider_credentials(self, credentials: dict) -> None: + """ + اعتبارنامه‌های ارائه دهنده را تأیید کنید + شما می‌توانید هر روش validate_credentials از نوع مدل را انتخاب کنید یا روش تأیید را خودتان پیاده‌سازی کنید، + مانند: دریافت API لیست مدل + + در صورت عدم تأیید، استثناء را ایجاد کنید + + :param credentials: اعتبارنامه‌های ارائه دهنده، فرم اعتبارنامه در `provider_credential_schema` تعریف شده است. + """ +``` + +- `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + +در صورت شکست تأیید، خطای `errors.validate.CredentialsValidateFailedError` را ایجاد کنید. + +## مدل + +مدل‌ها به 5 نوع مختلف تقسیم می‌شوند که هر کدام از کلاس‌های پایه متفاوتی ارث می‌برند و نیاز به پیاده‌سازی روش‌های متفاوتی دارند. + +همه مدل‌ها باید به طور یکسان دو روش زیر را پیاده‌سازی کنند: + +- تأیید اعتبارنامه مدل + + مشابه تأیید اعتبارنامه ارائه دهنده، این مرحله شامل تأیید برای یک مدل خاص است. + + + ```python + def validate_credentials(self, model: str, credentials: dict) -> None: + """ + اعتبارنامه‌های مدل را تأیید کنید + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :return: + """ + ``` + + پارامترها: + + - `model` (string) نام مدل + + - `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` یا `model_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + + در صورت شکست تأیید، خطای `errors.validate.CredentialsValidateFailedError` را ایجاد کنید. + +- جدول نگاشت خطای فراخوانی + + هنگامی که در فراخوانی مدل استثنا وجود دارد، باید به نوع `InvokeError` مشخص شده توسط Runtime نگاشت شود. این امر به Dify اجازه می‌دهد تا خطاهای مختلف را با اقدامات بعدی مناسب مدیریت کند. + + خطاهای Runtime: + + - `InvokeConnectionError` خطای اتصال فراخوانی + - `InvokeServerUnavailableError` ارائه دهنده سرویس فراخوانی در دسترس نیست + - `InvokeRateLimitError` فراخوانی به محدودیت نرخ رسید + - `InvokeAuthorizationError` فراخوانی مجوز ناموفق بود + - `InvokeBadRequestError` فراخوانی پارامتر خطا + + ```python + @property + def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]: + """ + خطای فراخوانی مدل را به خطای یکپارچه نگاشت کنید + کلید نوع خطای پرتاب شده به فراخوانی کننده است + مقدار نوع خطای پرتاب شده توسط مدل است، + که باید به نوع خطای یکپارچه برای فراخوانی کننده تبدیل شود. + + :return: نگاشت خطای فراخوانی + """ + ``` + +​ می‌توانید به `_invoke_error_mapping` OpenAI برای مثال مراجعه کنید. + +### LLM + +کلاس پایه `__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]: + """ + فراخوانی مدل زبان بزرگ + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :param prompt_messages: پیام‌های تقاضا + :param model_parameters: پارامترهای مدل + :param tools: ابزارها برای فراخوانی ابزار + :param stop: کلمات توقف + :param stream: آیا جریان پاسخ است + :param user: شناسه کاربری منحصر به فرد + :return: پاسخ کامل یا نتیجه مولد تکه پاسخ جریان + """ + ``` + + - پارامترها: + + - `model` (string) نام مدل + + - `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` یا `model_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + + - `prompt_messages` (array[[PromptMessage](#PromptMessage)]) لیست تقاضاها + + اگر مدل از نوع `Completion` باشد، لیست فقط باید شامل یک عنصر [UserPromptMessage](#UserPromptMessage) باشد. + + اگر مدل از نوع `Chat` باشد، به لیستی از عناصر مانند [SystemPromptMessage](#SystemPromptMessage)، [UserPromptMessage](#UserPromptMessage)، [AssistantPromptMessage](#AssistantPromptMessage)، [ToolPromptMessage](#ToolPromptMessage) بسته به پیام نیاز دارد. + + - `model_parameters` (object) پارامترهای مدل + + پارامترهای مدل توسط `parameter_rules` در پیکربندی YAML مدل تعریف شده‌اند. + + - `tools` (array[[PromptMessageTool](#PromptMessageTool)]) [optional] لیست ابزار، معادل `function` در `function calling`. + + یعنی لیست ابزار برای فراخوانی ابزار. + + - `stop` (array[string]) [optional] دنباله‌های توقف + + خروجی مدل قبل از رشته‌ای که توسط دنباله توقف تعریف شده است، متوقف خواهد شد. + + - `stream` (bool) آیا به صورت جریان خروجی تولید شود، پیش فرض True است + + خروجی جریان Generator[[LLMResultChunk](#LLMResultChunk)] را برمی‌گرداند، خروجی غیر جریان [LLMResult](#LLMResult) را برمی‌گرداند. + + - `user` (string) [optional] شناسه منحصر به فرد کاربر + + این می‌تواند به ارائه دهنده کمک کند تا رفتارهای سوء استفاده را کنترل و تشخیص دهد. + + - بازگشت‌ها + + خروجی جریان Generator[[LLMResultChunk](#LLMResultChunk)] را برمی‌گرداند، خروجی غیر جریان [LLMResult](#LLMResult) را برمی‌گرداند. + +- پیش محاسبه توکن‌های ورودی + + اگر مدل رابط توکن‌های پیش محاسبه شده را ارائه نمی‌دهد، می‌توانید مستقیماً 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: + """ + ``` + + برای توضیحات پارامتر، به بخش بالا در مورد `فراخوانی LLM` مراجعه کنید. + +- دریافت طرح مدل سفارشی [اختیاری] + + ```python + def get_customizable_model_schema(self, model: str, credentials: dict) -> Optional[AIModelEntity]: + """ + طرح مدل قابل تنظیم را دریافت کنید + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :return: طرح مدل + """ + ``` + + هنگامی که ارائه دهنده از اضافه کردن LLMهای سفارشی پشتیبانی می‌کند، می‌توان این روش را برای اجازه دادن به مدل‌های سفارشی برای دریافت طرح مدل پیاده‌سازی کرد. بازگشت پیش فرض null است. + + +### TextEmbedding + +کلاس پایه `__base.text_embedding_model.TextEmbeddingModel` را به ارث ببرید و رابط‌های زیر را پیاده‌سازی کنید: + +- فراخوانی تعبیه + + ```python + def _invoke(self, model: str, credentials: dict, + texts: list[str], user: Optional[str] = None) \ + -> TextEmbeddingResult: + """ + فراخوانی مدل زبان بزرگ + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :param texts: متن‌هایی که باید تعبیه شوند + :param user: شناسه کاربری منحصر به فرد + :return: نتایج تعبیه + """ + ``` + + - پارامترها: + + - `model` (string) نام مدل + + - `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` یا `model_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + + - `texts` (array[string]) لیست متن‌ها، قادر به پردازش دسته ای + + - `user` (string) [optional] شناسه منحصر به فرد کاربر + + این می‌تواند به ارائه دهنده کمک کند تا رفتارهای سوء استفاده را کنترل و تشخیص دهد. + + - بازگشت‌ها: + + موجودیت [TextEmbeddingResult](#TextEmbeddingResult). + +- پیش محاسبه توکن‌ها + + ```python + def get_num_tokens(self, model: str, credentials: dict, texts: list[str]) -> int: + """ + تعداد توکن‌ها را برای پیام‌های تقاضای داده شده دریافت کنید + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :param texts: متن‌هایی که باید تعبیه شوند + :return: + """ + ``` + + برای توضیحات پارامتر، به بخش بالا در مورد `فراخوانی تعبیه` مراجعه کنید. + +### Rerank + +کلاس پایه `__base.rerank_model.RerankModel` را به ارث ببرید و رابط‌های زیر را پیاده‌سازی کنید: + +- فراخوانی Rerank + + ```python + def _invoke(self, model: str, credentials: dict, + query: str, docs: list[str], score_threshold: Optional[float] = None, top_n: Optional[int] = None, + user: Optional[str] = None) \ + -> RerankResult: + """ + فراخوانی مدل Rerank + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :param query: جستجوی پرس و جو + :param docs: اسناد برای Reranking + :param score_threshold: آستانه نمره + :param top_n: top n + :param user: شناسه کاربری منحصر به فرد + :return: نتیجه Rerank + """ + ``` + + - پارامترها: + + - `model` (string) نام مدل + + - `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` یا `model_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + + - `query` (string) محتوای درخواست پرس و جو + + - `docs` (array[string]) لیست بخش‌هایی که باید Rerank شوند + + - `score_threshold` (float) [optional] آستانه نمره + + - `top_n` (int) [optional] انتخاب top n بخش‌ها + + - `user` (string) [optional] شناسه منحصر به فرد کاربر + + این می‌تواند به ارائه دهنده کمک کند تا رفتارهای سوء استفاده را کنترل و تشخیص دهد. + + - بازگشت‌ها: + + موجودیت [RerankResult](#RerankResult). + +### Speech2text + +کلاس پایه `__base.speech2text_model.Speech2TextModel` را به ارث ببرید و رابط‌های زیر را پیاده‌سازی کنید: + +- فراخوانی Invoke + + ```python + def _invoke(self, model: str, credentials: dict, file: IO[bytes], user: Optional[str] = None) -> str: + """ + فراخوانی مدل زبان بزرگ + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :param file: فایل صوتی + :param user: شناسه کاربری منحصر به فرد + :return: متن برای فایل صوتی داده شده + """ + ``` + + - پارامترها: + + - `model` (string) نام مدل + + - `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` یا `model_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + + - `file` (File) جریان فایل + + - `user` (string) [optional] شناسه منحصر به فرد کاربر + + این می‌تواند به ارائه دهنده کمک کند تا رفتارهای سوء استفاده را کنترل و تشخیص دهد. + + - بازگشت‌ها: + + رشته‌ای که بعد از تبدیل گفتار به متن است. + +### Text2speech + +کلاس پایه `__base.text2speech_model.Text2SpeechModel` را به ارث ببرید و رابط‌های زیر را پیاده‌سازی کنید: + +- فراخوانی Invoke + + ```python + def _invoke(self, model: str, credentials: dict, content_text: str, streaming: bool, user: Optional[str] = None): + """ + فراخوانی مدل زبان بزرگ + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :param content_text: محتوای متنی که باید ترجمه شود + :param streaming: خروجی جریان است + :param user: شناسه کاربری منحصر به فرد + :return: فایل صوتی ترجمه شده + """ + ``` + + - پارامترها: + + - `model` (string) نام مدل + + - `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` یا `model_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + + - `content_text` (string) محتوای متنی که باید تبدیل شود + + - `streaming` (bool) آیا به صورت جریان خروجی تولید شود + + - `user` (string) [optional] شناسه منحصر به فرد کاربر + + این می‌تواند به ارائه دهنده کمک کند تا رفتارهای سوء استفاده را کنترل و تشخیص دهد. + + - بازگشت‌ها: + + جریان گفتار تبدیل شده از متن。 + +### Moderation + +کلاس پایه `__base.moderation_model.ModerationModel` را به ارث ببرید و رابط‌های زیر را پیاده‌سازی کنید: + +- فراخوانی Invoke + + ```python + def _invoke(self, model: str, credentials: dict, + text: str, user: Optional[str] = None) \ + -> bool: + """ + فراخوانی مدل زبان بزرگ + + :param model: نام مدل + :param credentials: اعتبارنامه‌های مدل + :param text: متن برای نظارت + :param user: شناسه کاربری منحصر به فرد + :return: false اگر متن امن باشد، در غیر این صورت true + """ + ``` + + - پارامترها: + + - `model` (string) نام مدل + + - `credentials` (object) اطلاعات اعتبارنامه + + پارامترهای اطلاعات اعتبارنامه توسط `provider_credential_schema` یا `model_credential_schema` در فایل پیکربندی YAML ارائه دهنده تعریف شده‌اند. ورودی‌هایی مانند `api_key` شامل می‌شوند. + + - `text` (string) محتوای متن + + - `user` (string) [optional] شناسه منحصر به فرد کاربر + + این می‌تواند به ارائه دهنده کمک کند تا رفتارهای سوء استفاده را کنترل و تشخیص دهد. + + - بازگشت‌ها: + + False نشان می‌دهد که متن ورودی امن است، True نشان می‌دهد که این طور نیست. + + + +## موجودیت‌ها + +### PromptMessageRole + +نقش پیام تقاضا + +```python +class PromptMessageRole(Enum): + """ + کلاس Enum برای پیام تقاضا. + """ + SYSTEM = "system" + USER = "user" + ASSISTANT = "assistant" + TOOL = "tool" +``` + +### PromptMessageContentType + +انواع محتوای پیام تقاضا، به متن و تصویر تقسیم شده است. + +```python +class PromptMessageContentType(Enum): + """ + کلاس Enum برای نوع محتوای پیام تقاضا. + """ + TEXT = 'text' + IMAGE = 'image' +``` + +### PromptMessageContent + +کلاس پایه محتوای پیام تقاضا، فقط برای اعلام پارامتر استفاده می‌شود و نمی‌توان آن را مقداردهی اولیه کرد. + +```python +class PromptMessageContent(BaseModel): + """ + کلاس مدل برای محتوای پیام تقاضا. + """ + type: PromptMessageContentType + data: str +``` + +در حال حاضر، دو نوع پشتیبانی می‌شوند: متن و تصویر. امکان ورودی همزمان متن و چندین تصویر وجود دارد. + +برای ورودی، باید `TextPromptMessageContent` و `ImagePromptMessageContent` را به طور جداگانه مقداردهی اولیه کنید. + +### TextPromptMessageContent + +```python +class TextPromptMessageContent(PromptMessageContent): + """ + کلاس مدل برای محتوای پیام تقاضای متن. + """ + type: PromptMessageContentType = PromptMessageContentType.TEXT +``` + +اگر ترکیبی از متن و تصاویر را وارد می‌کنید، متن باید به عنوان بخشی از لیست `content` به این موجودیت ساخته شود. + +### ImagePromptMessageContent + +```python +class ImagePromptMessageContent(PromptMessageContent): + """ + کلاس مدل برای محتوای پیام تقاضای تصویر. + """ + class DETAIL(Enum): + LOW = 'low' + HIGH = 'high' + + type: PromptMessageContentType = PromptMessageContentType.IMAGE + detail: DETAIL = DETAIL.LOW # رزولوشن +``` + +اگر ترکیبی از متن و تصاویر را وارد می‌کنید، تصاویر باید به عنوان بخشی از لیست `content` به این موجودیت ساخته شوند. + +`data` می‌تواند یک `url` یا یک رشته کدگذاری شده `base64` از تصویر باشد. + +### PromptMessage + +کلاس پایه برای همه بدنه‌های پیام نقش، فقط برای اعلام پارامتر استفاده می‌شود و نمی‌توان آن را مقداردهی اولیه کرد. + +```python +class PromptMessage(ABC, BaseModel): + """ + کلاس مدل برای پیام تقاضا. + """ + role: PromptMessageRole + content: Optional[str | list[PromptMessageContent]] = None # دو نوع را پشتیبانی می‌کند: رشته و لیست محتوا. لیست محتوا برای پاسخگویی به نیازهای ورودی‌های چندوجهی طراحی شده است. برای اطلاعات بیشتر، به توضیحات PromptMessageContent مراجعه کنید. + name: Optional[str] = None +``` + +### UserPromptMessage + +بدنه پیام UserMessage، نشان دهنده پیام یک کاربر است. + +```python +class UserPromptMessage(PromptMessage): + """ + کلاس مدل برای پیام تقاضای کاربر. + """ + role: PromptMessageRole = PromptMessageRole.USER +``` + +### AssistantPromptMessage + +نمایشگر پیامی که توسط مدل برگردانده شده است، معمولاً برای `few-shots` یا وارد کردن تاریخچه چت استفاده می‌شود. + +```python +class AssistantPromptMessage(PromptMessage): + """ + کلاس مدل برای پیام تقاضای دستیار. + """ + class ToolCall(BaseModel): + """ + کلاس مدل برای فراخوانی ابزار پیام تقاضای دستیار. + """ + class ToolCallFunction(BaseModel): + """ + کلاس مدل برای تابع فراخوانی ابزار پیام تقاضای دستیار. + """ + name: str # نام ابزار + arguments: str # استدلال‌های ابزار + + id: str # شناسه ابزار، فقط در فراخوانی‌های ابزار OpenAI مؤثر است. این شناسه منحصر به فرد برای فراخوانی ابزار است و یک ابزار می‌تواند چندین بار فراخوانی شود. + type: str # پیش فرض: function + function: ToolCallFunction # اطلاعات فراخوانی ابزار + + role: PromptMessageRole = PromptMessageRole.ASSISTANT + tool_calls: list[ToolCall] = [] # نتیجه فراخوانی ابزار در پاسخ از مدل (فقط در هنگام ورودی ابزارها و زمانی که مدل آن را برای فراخوانی ابزار لازم می‌داند، برگردانده می‌شود). +``` + +که در آن `tool_calls` لیست `فراخوانی‌های ابزار` برگردانده شده توسط مدل بعد از فراخوانی مدل با ورودی `tools` است. + +### SystemPromptMessage + +نمایشگر پیام‌های سیستم، معمولاً برای تنظیم دستورات سیستم داده شده به مدل استفاده می‌شود. + +```python +class SystemPromptMessage(PromptMessage): + """ + کلاس مدل برای پیام تقاضای سیستم. + """ + role: PromptMessageRole = PromptMessageRole.SYSTEM +``` + +### ToolPromptMessage + +نمایشگر پیام‌های ابزار، برای انتقال نتایج اجرای یک ابزار به مدل برای مرحله بعدی پردازش استفاده می‌شود. + +```python +class ToolPromptMessage(PromptMessage): + """ + کلاس مدل برای پیام تقاضای ابزار. + """ + role: PromptMessageRole = PromptMessageRole.TOOL + tool_call_id: str # شناسه فراخوانی ابزار. اگر فراخوانی ابزار OpenAI پشتیبانی نشود، نام ابزار نیز می‌تواند وارد شود. +``` + +`content` کلاس پایه نتایج اجرای ابزار را دریافت می‌کند. + +### PromptMessageTool + +```python +class PromptMessageTool(BaseModel): + """ + کلاس مدل برای ابزار پیام تقاضا. + """ + name: str + description: str + parameters: dict +``` + +--- + +### LLMResult + +```python +class LLMResult(BaseModel): + """ + کلاس مدل برای نتیجه LLM. + """ + model: str # مدل واقعی استفاده شده + prompt_messages: list[PromptMessage] # پیام‌های تقاضا + message: AssistantPromptMessage # پیام پاسخ + usage: LLMUsage # اطلاعات استفاده + system_fingerprint: Optional[str] = None # اثر انگشت درخواست، به تعریف OpenAI مراجعه کنید +``` + +### LLMResultChunkDelta + +در بازگشت‌های جریان، هر تکرار شامل موجودیت `delta` است. + +```python +class LLMResultChunkDelta(BaseModel): + """ + کلاس مدل برای delta تکه نتیجه LLM. + """ + index: int + message: AssistantPromptMessage # پیام پاسخ + usage: Optional[LLMUsage] = None # اطلاعات استفاده + finish_reason: Optional[str] = None # دلیل اتمام، فقط آخرین مورد بازگردانده می‌شود +``` + +### LLMResultChunk + +هر موجودیت تکرار در بازگشت‌های جریان. + +```python +class LLMResultChunk(BaseModel): + """ + کلاس مدل برای تکه نتیجه LLM. + """ + model: str # مدل واقعی استفاده شده + prompt_messages: list[PromptMessage] # پیام‌های تقاضا + system_fingerprint: Optional[str] = None # اثر انگشت درخواست، به تعریف OpenAI مراجعه کنید + delta: LLMResultChunkDelta +``` + +### LLMUsage + +```python +class LLMUsage(ModelUsage): + """ + کلاس مدل برای استفاده LLM. + """ + prompt_tokens: int # توکن‌های استفاده شده برای تقاضا + prompt_unit_price: Decimal # قیمت واحد برای تقاضا + prompt_price_unit: Decimal # واحد قیمت برای تقاضا، یعنی قیمت واحد بر اساس تعداد توکن‌ها + prompt_price: Decimal # هزینه تقاضا + completion_tokens: int # توکن‌های استفاده شده برای پاسخ + completion_unit_price: Decimal # قیمت واحد برای پاسخ + completion_price_unit: Decimal # واحد قیمت برای پاسخ، یعنی قیمت واحد بر اساس تعداد توکن‌ها + completion_price: Decimal # هزینه پاسخ + total_tokens: int # تعداد کل توکن‌های استفاده شده + total_price: Decimal # هزینه کل + currency: str # واحد پول + latency: float # تأخیر درخواست (ثانیه) +``` + +--- + +### TextEmbeddingResult + +```python +class TextEmbeddingResult(BaseModel): + """ + کلاس مدل برای نتیجه تعبیه متن. + """ + model: str # مدل واقعی استفاده شده + embeddings: list[list[float]] # لیست بردارهای تعبیه، مطابق با لیست متن‌های ورودی + usage: EmbeddingUsage # اطلاعات استفاده +``` + +### EmbeddingUsage + +```python +class EmbeddingUsage(ModelUsage): + """ + کلاس مدل برای استفاده تعبیه. + """ + tokens: int # تعداد توکن‌های استفاده شده + total_tokens: int # تعداد کل توکن‌های استفاده شده + unit_price: Decimal # قیمت واحد + price_unit: Decimal # واحد قیمت، یعنی قیمت واحد بر اساس تعداد توکن‌ها + total_price: Decimal # هزینه کل + currency: str # واحد پول + latency: float # تأخیر درخواست (ثانیه) +``` + +--- + +### RerankResult + +```python +class RerankResult(BaseModel): + """ + کلاس مدل برای نتیجه Rerank. + """ + model: str # مدل واقعی استفاده شده + docs: list[RerankDocument] # لیست اسناد Rerank شده +``` + +### RerankDocument + +```python +class RerankDocument(BaseModel): + """ + کلاس مدل برای سند Rerank. + """ + index: int # شاخص اصلی + text: str + score: float +``` + + diff --git a/fa/guides/model-configuration/load-balancing.md b/fa/guides/model-configuration/load-balancing.md new file mode 100644 index 000000000..d0e7098ee --- /dev/null +++ b/fa/guides/model-configuration/load-balancing.md @@ -0,0 +1,35 @@ +# ترازبندی بار + +محدودیت‌های نرخ مدل، محدودیت‌هایی هستند که توسط ارائه دهندگان مدل بر تعداد دفعاتی که کاربران یا مشتریان می‌توانند در یک بازه زمانی مشخص به خدمات API دسترسی داشته باشند، اعمال می‌شود. این محدودیت‌ها به جلوگیری از سوء استفاده یا استفاده نادرست از API، اطمینان از دسترسی عادلانه برای همه کاربران و کنترل بار کلی بر روی زیرساخت کمک می‌کنند. + +در تماس‌های API مدل در مقیاس بزرگ در سطح شرکت، درخواست‌های همزمان بالا می‌تواند از محدودیت‌های نرخ فراتر رود و بر دسترسی کاربران تأثیر بگذارد. ترازبندی بار می‌تواند درخواست‌های API را در چندین نقطه انتهایی API توزیع کند، و اطمینان حاصل شود که همه کاربران سریع‌ترین پاسخ و بالاترین توان خروجی فراخوانی مدل را دریافت می‌کنند و در نتیجه عملیات تجاری پایدار را تضمین می‌کنند. + +شما می‌توانید این ویژگی را با رفتن به **ارائه دهنده مدل - لیست مدل - پیکربندی ترازبندی بار مدل** و اضافه کردن چندین اعتبارنامه (کلیدهای API) برای همان مدل فعال کنید. + +

ترازبندی بار مدل

+ +{% hint style="info" %} +ترازبندی بار مدل یک ویژگی پولی است. شما می‌توانید آن را با [اشتراک در خدمات پولی SaaS](../../getting-started/cloud.md#subscription-plan) یا خرید نسخه شرکتی فعال کنید. +{% endhint %} + +کلید API پیش فرض، اعتبارنامه‌ای است که هنگام پیکربندی اولیه ارائه دهنده مدل اضافه شده است. برای استفاده صحیح از ویژگی ترازبندی بار، باید برای استفاده از همان مدل، **افزودن پیکربندی** را کلیک کنید تا کلیدهای API متفاوتی اضافه کنید. + +

پیکربندی ترازبندی بار

+ +**حداقل یک اعتبارنامه مدل اضافی** باید برای ذخیره و فعال کردن ترازبندی بار اضافه شود. + +همچنین می‌توانید **به طور موقت غیرفعال** یا **حذف** اعتبارنامه‌های پیکربندی شده را انجام دهید. + +
+ +پس از پیکربندی، همه مدل‌های دارای ترازبندی بار فعال در لیست مدل نمایش داده می‌شوند. + +

فعال کردن ترازبندی بار

+ +{% hint style="info" %} +به طور پیش فرض، ترازبندی بار از استراتژی دوره‌ای استفاده می‌کند. اگر محدودیت نرخ فعال شود، یک دوره خنک شدن 1 دقیقه‌ای اعمال می‌شود. +{% endhint %} + +همچنین می‌توانید ترازبندی بار را از **افزودن مدل** با دنبال کردن همان فرایند بالا پیکربندی کنید. + +

پیکربندی ترازبندی بار از افزودن مدل

diff --git a/fa/guides/model-configuration/new-provider.md b/fa/guides/model-configuration/new-provider.md new file mode 100644 index 000000000..b52b9bcc6 --- /dev/null +++ b/fa/guides/model-configuration/new-provider.md @@ -0,0 +1,194 @@ +# اضافه کردن یک ارائه دهنده جدید + +### روش‌های پیکربندی ارائه دهنده + +ارائه دهندگان از سه مدل پیکربندی پشتیبانی می‌کنند: + +**مدل از پیش تعریف شده** + +این نشان می‌دهد که کاربران فقط نیاز به پیکربندی اعتبارنامه‌های ارائه دهنده یکپارچه برای استفاده از مدل‌های از پیش تعریف شده در ارائه دهنده دارند. + +**مدل قابل تنظیم** + +کاربران باید برای هر مدل، پیکربندی اعتبارنامه‌ها را اضافه کنند. برای مثال، Xinference هم از LLM و هم از Text Embedding پشتیبانی می‌کند، اما هر مدل یک **model_uid** منحصر به فرد دارد. اگر می‌خواهید به هر دو متصل شوید، باید برای هر مدل یک **model_uid** پیکربندی کنید. + +**دریافت از راه دور** + +مشابه روش پیکربندی `predefined-model`، کاربران فقط نیاز به پیکربندی اعتبارنامه‌های ارائه دهنده یکپارچه دارند، و مدل‌ها با استفاده از اطلاعات اعتبارنامه از ارائه دهنده دریافت می‌شوند. + +به عنوان مثال، با OpenAI، می‌توانیم چندین مدل را بر اساس gpt-turbo-3.5 تنظیم دقیق کنیم، همه در زیر یک **api_key** یکسان. هنگامی که به عنوان `fetch-from-remote` پیکربندی می‌شود، توسعه دهندگان فقط نیاز به پیکربندی یک **api_key** یکپارچه دارند تا به Dify Runtime اجازه دهند تا همه مدل‌های تنظیم دقیق شده توسعه دهنده را دریافت کند و به Dify متصل شود. + +این سه روش پیکربندی می‌توانند **همزمان وجود داشته باشند**، به این معنی که یک ارائه دهنده می‌تواند از `predefined-model` + `customizable-model` یا `predefined-model` + `fetch-from-remote` و غیره پشتیبانی کند. این امر امکان استفاده از مدل‌های از پیش تعریف شده و مدل‌های دریافت شده از راه دور با اعتبارنامه‌های ارائه دهنده یکپارچه را فراهم می‌کند، و مدل‌های سفارشی اضافی در صورت اضافه شدن قابل استفاده هستند. + +### دستورالعمل‌های پیکربندی + +**اصطلاحات** + +* `module`: یک `module` یک بسته Python است، یا به طور عامیانه‌تر، یک پوشه حاوی یک فایل `__init__.py` و فایل‌های `.py` دیگر. + +**مراحل** + +افزودن یک ارائه دهنده جدید عمدتاً شامل چندین مرحله است. در اینجا یک طرح مختصر برای ارائه درک کلی ارائه شده است. مراحل دقیق در زیر ارائه شده است. + +* یک فایل YAML ارائه دهنده ایجاد کنید و آن را مطابق با [طرح ارائه دهنده](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/en_US/schema.md) بنویسید. +* کد ارائه دهنده را ایجاد کنید و یک `class` پیاده سازی کنید. +* `modules` نوع مدل مربوطه را در `module` ارائه دهنده ایجاد کنید، مانند `llm` یا `text_embedding`. +* فایل‌های کد با نام مشابه را در `module` مدل مربوطه ایجاد کنید، مانند `llm.py`، و یک `class` پیاده سازی کنید. +* اگر مدل‌های از پیش تعریف شده وجود دارد، فایل‌های YAML با نام مشابه را در `module` مدل ایجاد کنید، مانند `claude-2.1.yaml`، و آنها را مطابق با [نهاد مدل AI](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/en_US/schema.md#aimodelentity) بنویسید. +* کد تست را برای اطمینان از در دسترس بودن قابلیت‌های آن بنویسید. + +#### بیایید شروع کنیم + +برای افزودن یک ارائه دهنده جدید، ابتدا شناسه انگلیسی ارائه دهنده را مشخص کنید، مانند `anthropic`، و یک `module` با نام آن در `model_providers` ایجاد کنید. + +در این `module`، باید پیکربندی 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: # اطلاعات 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` که مدل‌های تنظیم دقیق شده را ارائه می‌دهد، باید [`model_credential_schema`](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/en_US/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: شناسه سازمان + en_US: Organization + type: text-input + required: false + placeholder: + zh_Hans: در اینجا شناسه سازمان خود را وارد کنید + en_US: Enter your Organization ID + - variable: openai_api_base + label: + zh_Hans: پایه API + en_US: API Base + type: text-input + required: false + placeholder: + zh_Hans: در اینجا پایه API خود را وارد کنید + en_US: Enter your API Base +``` + +همچنین می توانید به [اطلاعات پیکربندی YAML](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/docs/en_US/schema.md) در دایرکتوری‌های ارائه دهنده‌های دیگر در زیر دایرکتوری `model_providers` مراجعه کنید. + +**پیاده سازی کد ارائه دهنده** + +باید یک فایل Python با همان نام در زیر `model_providers` ایجاد کنیم، مانند `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_credentials از نوع مدل یا روش validate را به صورت خودتان پیاده سازی کنید، + مانند: گرفتن لیست مدل api + + اگر اعتبارسنجی ناموفق بود، یک استثنا را مطرح کنید + + :param credentials: اعتبارنامه‌های ارائه دهنده، فرم اعتبارنامه تعریف شده در `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` کپی کنید و سپس اجرا کنید. + +**نوشتن کد تست** + +یک `module` با همان نام ارائه دهنده در زیر دایرکتوری `tests` ایجاد کنید: `anthropic`، و همچنان `test_provider.py` و فایل‌های تست نوع مدل مربوطه را در این ماژول ایجاد کنید، مانند زیر: + +```shell +. +├── __init__.py +├── anthropic +│   ├── __init__.py +│   ├── test_llm.py # تست LLM +│   └── test_provider.py # تست ارائه دهنده +``` + +کد تست را برای موقعیت‌های مختلف کد پیاده سازی شده در بالا بنویسید، و پس از قبولی در تست‌ها، کد را ارسال کنید. + + diff --git a/fa/guides/model-configuration/predefined-model.md b/fa/guides/model-configuration/predefined-model.md new file mode 100644 index 000000000..8f5350653 --- /dev/null +++ b/fa/guides/model-configuration/predefined-model.md @@ -0,0 +1,197 @@ +# ادغام مدل از پیش تعریف شده + +پس از اتمام ادغام تأمین‌کننده، مرحله بعدی ادغام مدل‌ها در زیر تأمین‌کننده است. + +ابتدا باید نوع مدل مورد ادغام را تعیین کرده و ماژول مربوطه به نوع مدل را در دایرکتوری تأمین‌کننده مربوطه ایجاد کنیم. + +نوع مدل‌های پشتیبانی شده در حال حاضر به شرح زیر است: + +* `llm` مدل تولید متن +* `text_embedding` مدل Embedding متن +* `rerank` مدل Rerank +* `speech2text` تبدیل گفتار به متن +* `tts` تبدیل متن به گفتار +* `moderation` تعدیل + +با استفاده از `Anthropic` به عنوان مثال، `Anthropic` فقط از LLM پشتیبانی می‌کند، بنابراین ما یک ماژول به نام `llm` در `model_providers.anthropic` ایجاد می‌کنیم. + +برای مدل‌های از پیش تعریف شده، ابتدا باید یک فایل YAML با نام مدل را در ماژول `llm` ایجاد کنیم، مانند: `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 از استدلال Agent پشتیبانی می‌کند، 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' # قیمت واحد ورودی، به عنوان مثال، قیمت واحد Prompt + output: '24.00' # قیمت واحد خروجی، به عنوان مثال، قیمت واحد بازگشت محتوا + unit: '0.000001' # واحد قیمت، قیمت بالا به ازای هر 100K است. + currency: USD # واحد پول قیمت +``` + +توصیه می‌شود تمام پیکربندی‌های مدل را قبل از شروع پیاده‌سازی کد مدل آماده کنید. + +به طور مشابه، می‌توانید به اطلاعات پیکربندی YAML در دایرکتوری‌های تأمین‌کنندگان دیگر در دایرکتوری `model_providers` مراجعه کنید. قوانین کامل YAML را می‌توان در: Schema[^1] یافت. + +#### پیاده‌سازی کد فراخوانی مدل + +در مرحله بعد، یک فایل Python با همان نام `llm.py` را در ماژول `llm` برای نوشتن کد پیاده‌سازی ایجاد کنید. + +یک کلاس Anthropic LLM را در `llm.py` ایجاد کنید، که ما آن را `AnthropicLargeLanguageModel` (نام می‌تواند دلخواه باشد) می‌نامیم، که از کلاس پایه `__base.large_language_model.LargeLanguageModel` ارث‌بری می‌کند، و روش‌های زیر را پیاده‌سازی می‌کند: + +* فراخوانی LLM + + روش اصلی را برای فراخوانی LLM پیاده‌سازی کنید، که از پاسخ‌های همزمان و Streaming پشتیبانی می‌کند. + + ```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]: + """ + فراخوانی مدل زبان بزرگ + + :param model: نام مدل + :param credentials: اعتبارنامه مدل + :param prompt_messages: پیام‌های Prompt + :param model_parameters: پارامترهای مدل + :param tools: ابزارها برای فراخوانی ابزار + :param stop: کلمات توقف + :param stream: آیا پاسخ Streaming است + :param user: شناسه کاربری منحصر به فرد + :return: پاسخ کامل یا نتیجه مولد قطعه پاسخ Streaming + """ + ``` + + هنگام پیاده‌سازی، توجه داشته باشید که از دو تابع برای بازگرداندن داده‌ها استفاده کنید، یکی برای رسیدگی به پاسخ‌های همزمان و دیگری برای پاسخ‌های Streaming. از آنجایی که پایتون توابع حاوی کلمه کلیدی `yield` را به عنوان توابع مولد تشخیص می‌دهد، بازگرداندن یک نوع داده ثابت `Generator`، پاسخ‌های همزمان و Streaming باید به طور جداگانه پیاده‌سازی شوند، مانند این (توجه داشته باشید که مثال زیر از پارامترهای ساده‌شده استفاده می‌کند، پیاده‌سازی واقعی باید از لیست پارامتر بالا پیروی کند): + + ```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: + """ + تعداد توکن‌ها را برای پیام‌های Prompt مشخص شده دریافت کنید + + :param model: نام مدل + :param credentials: اعتبارنامه مدل + :param prompt_messages: پیام‌های Prompt + :param tools: ابزارها برای فراخوانی ابزار + :return: + """ + ``` +* اعتبارسنجی اعتبارنامه مدل + + مشابه اعتبارسنجی اعتبارنامه تأمین‌کننده، این اعتبارنامه‌ها را برای یک مدل واحد اعتبارسنجی می‌کند. + + ```python + def validate_credentials(self, model: str, credentials: dict) -> None: + """ + اعتبارسنجی اعتبارنامه مدل + + :param model: نام مدل + :param credentials: اعتبارنامه مدل + :return: + """ + ``` +* جدول نگاشت خطای فراخوانی + + هنگامی که خطای فراخوانی مدل رخ می‌دهد، باید به نوع `InvokeError` مشخص شده توسط Runtime نگاشت شود، که به Dify کمک می‌کند تا خطاهای مختلف را به طور متفاوتی اداره کند. + + خطاهای Runtime: + + * `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/en_US/interfaces.md) مراجعه کنید، و برای پیاده‌سازی خاص، به: [llm.py](https://github.com/langgenius/dify-runtime/blob/main/lib/model_providers/anthropic/llm/llm.py) مراجعه کنید. + +[^1]: #### Provider + + * `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` در زیر دایرکتوری پیاده‌سازی تأمین‌کننده مربوطه ذخیره شده است، از همان استراتژی زبان `label` پیروی می‌کند + * `zh_Hans` (string) [optional] آیکون چینی + * `en_US` (string) آیکون انگلیسی + * `icon_large` (string) [optional] آیکون بزرگ تأمین‌کننده، در دایرکتوری `_assets` در زیر دایرکتوری پیاده‌سازی تأمین‌کننده مربوطه ذخیره شده است، از همان استراتژی زبان `label` پیروی می‌کند + * `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) طرح اعتبارنامه مدل diff --git a/fa/guides/model-configuration/schema.md b/fa/guides/model-configuration/schema.md new file mode 100644 index 000000000..f0709a9d7 --- /dev/null +++ b/fa/guides/model-configuration/schema.md @@ -0,0 +1,208 @@ +# قوانین پیکربندی + +- قوانین ارائه دهنده بر اساس موجودیت [ارائه دهنده](#ارائه دهنده) است. +- قوانین مدل بر اساس موجودیت [AIModelEntity](#AIModelEntity) است. + +> تمام موجودیت های ذکر شده در زیر بر اساس `Pydantic BaseModel` هستند و می توان آنها را در ماژول `entities` یافت. + +### ارائه دهنده + +- `provider` (string) شناسه ارائه دهنده، مانند `openai` +- `label` (object) نام نمایش ارائه دهنده، i18n، با تنظیمات زبان انگلیسی `en_US` و چینی `zh_Hans` + - `zh_Hans` (string) [optional] نام برچسب چینی، در صورت عدم تنظیم `zh_Hans`، `en_US` به طور پیش فرض استفاده می شود. + - `en_US` (string) نام برچسب انگلیسی +- `description` (object) توضیحات ارائه دهنده، i18n + - `zh_Hans` (string) [optional] توضیحات چینی + - `en_US` (string) توضیحات انگلیسی +- `icon_small` (string) [optional] نماد کوچک ارائه دهنده، ذخیره شده در فهرست `_assets` در فهرست پیاده سازی ارائه دهنده مربوطه، با همان استراتژی زبان `label` + - `zh_Hans` (string) نماد چینی + - `en_US` (string) نماد انگلیسی +- `icon_large` (string) [optional] نماد بزرگ ارائه دهنده، ذخیره شده در فهرست `_assets` در فهرست پیاده سازی ارائه دهنده مربوطه، با همان استراتژی زبان `label` + - `zh_Hans` (string) نماد چینی + - `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](#ModelType)]) انواع مدل پشتیبانی شده +- `configurate_methods` (array[[ConfigurateMethod](#ConfigurateMethod)]) روش های پیکربندی +- `provider_credential_schema` ([ProviderCredentialSchema](#ProviderCredentialSchema)) مشخصات اعتبار ارائه دهنده +- `model_credential_schema` ([ModelCredentialSchema](#ModelCredentialSchema)) مشخصات اعتبار مدل + +### AIModelEntity + +- `model` (string) شناسه مدل، مانند `gpt-3.5-turbo` +- `label` (object) [optional] نام نمایش مدل، i18n، با تنظیمات زبان انگلیسی `en_US` و چینی `zh_Hans` + - `zh_Hans` (string) [optional] نام برچسب چینی + - `en_US` (string) نام برچسب انگلیسی +- `model_type` ([ModelType](#ModelType)) نوع مدل +- `features` (array[[ModelFeature](#ModelFeature)]) [optional] فهرست ویژگی پشتیبانی شده +- `model_properties` (object) ویژگی های مدل + - `mode` ([LLMMode](#LLMMode)) حالت (برای نوع مدل `llm` در دسترس است) + - `context_size` (int) اندازه زمینه (برای انواع مدل `llm`، `text-embedding` در دسترس است) + - `max_chunks` (int) حداکثر تعداد بخش (برای انواع مدل `text-embedding`، `moderation` در دسترس است) + - `file_upload_limit` (int) حداکثر حد مجاز آپلود فایل، بر حسب مگابایت (برای نوع مدل `speech2text` در دسترس است) + - `supported_file_extensions` (string) فرمت های پسوند فایل پشتیبانی شده، مانند mp3، mp4 (برای نوع مدل `speech2text` در دسترس است) + - `default_voice` (string) صدای پیش فرض، مانند: alloy,echo,fable,onyx,nova,shimmer(برای نوع مدل `tts` در دسترس است) + - `voices` (list) فهرست صدای در دسترس.(برای نوع مدل `tts` در دسترس است) + - `mode` (string) مدل صدا.(برای نوع مدل `tts` در دسترس است) + - `name` (string) نام نمایش مدل صدا.(برای نوع مدل `tts` در دسترس است) + - `language` (string) زبان های پشتیبانی شده توسط مدل صدا.(برای نوع مدل `tts` در دسترس است) + - `word_limit` (int) حد مجاز کلمات تبدیل تک، به طور پیش فرض پاراگراف به پاراگراف(برای نوع مدل `tts` در دسترس است) + - `audio_type` (string) فرمت پسوند فایل صوتی پشتیبانی شده، مانند: mp3,wav(برای نوع مدل `tts` در دسترس است) + - `max_workers` (int) تعداد کارگران همزمان که تبدیل متن و صدا را پشتیبانی می کنند(برای نوع مدل`tts` در دسترس است) + - `max_characters_per_chunk` (int) حداکثر کاراکتر در هر بخش (برای نوع مدل `moderation` در دسترس است) +- `parameter_rules` (array[[ParameterRule](#ParameterRule)]) [optional] قوانین پارامتر فراخوانی مدل +- `pricing` ([PriceConfig](#PriceConfig)) [optional] اطلاعات قیمت گذاری +- `deprecated` (bool) آیا منسوخ شده است. اگر منسوخ شده باشد، مدل دیگر در فهرست نمایش داده نمی شود، اما کسانی که قبلاً پیکربندی شده اند می توانند به استفاده از آن ادامه دهند. پیش فرض False. + +### ModelType + +- `llm` مدل تولید متن +- `text-embedding` مدل Embedding متن +- `rerank` مدل Rerank +- `speech2text` تبدیل گفتار به متن +- `tts` تبدیل متن به گفتار +- `moderation` تعدیل + +### ConfigurateMethod + +- `predefined-model` مدل از پیش تعریف شده + + نشان می دهد که کاربران می توانند با پیکربندی اعتبار ارائه دهنده یکپارچه از مدل های از پیش تعریف شده در ارائه دهنده استفاده کنند. +- `customizable-model` مدل قابل تنظیم + + کاربران باید برای هر مدل پیکربندی اعتبار را اضافه کنند. + +- `fetch-from-remote` دریافت از راه دور + + مطابق با روش پیکربندی `predefined-model`، فقط نیاز به پیکربندی اعتبار ارائه دهنده یکپارچه است و مدل ها از طریق اطلاعات اعتبار از ارائه دهنده دریافت می شوند. + +### ModelFeature + +- `agent-thought` استدلال عامل، به طور کلی بیش از 70B با قابلیت زنجیره تفکر. +- `vision` بینایی، یعنی درک تصویر. +- `tool-call` +- `multi-tool-call` +- `stream-tool-call` + +### FetchFrom + +- `predefined-model` مدل از پیش تعریف شده +- `fetch-from-remote` مدل راه دور + +### LLMMode + +- `completion` تکمیل متن +- `chat` گفتگو + +### ParameterRule + +- `name` (string) نام واقعی پارامتر فراخوانی مدل +- `use_template` (string) [optional] استفاده از الگو + + به طور پیش فرض، 5 الگوی پیکربندی محتوای متغیر از پیش تعیین شده است: + + - `temperature` + - `top_p` + - `frequency_penalty` + - `presence_penalty` + - `max_tokens` + + در use_template، می توانید مستقیماً نام متغیر الگو را تنظیم کنید، که از پیکربندی پیش فرض در entities.defaults.PARAMETER_RULE_TEMPLATE استفاده می کند. + نیازی به تنظیم هیچ پارامتری به غیر از `name` و `use_template` نیست. اگر پارامترهای پیکربندی اضافی تنظیم شوند، پیکربندی پیش فرض را لغو می کنند. + به `openai/llm/gpt-3.5-turbo.yaml` مراجعه کنید. + +- `label` (object) [optional] برچسب، i18n + + - `zh_Hans`(string) [optional] نام برچسب چینی + - `en_US` (string) نام برچسب انگلیسی + +- `type`(string) [optional] نوع پارامتر + + - `int` عدد صحیح + - `float` اعشاری + - `string` رشته + - `boolean` بولی + +- `help` (string) [optional] اطلاعات راهنما + + - `zh_Hans` (string) [optional] اطلاعات راهنما به زبان چینی + - `en_US` (string) اطلاعات راهنما به زبان انگلیسی + +- `required` (bool) الزامی، پیش فرض False. + +- `default`(int/float/string/bool) [optional] مقدار پیش فرض + +- `min`(int/float) [optional] حداقل مقدار، فقط برای انواع عددی قابل اجرا است + +- `max`(int/float) [optional] حداکثر مقدار، فقط برای انواع عددی قابل اجرا است + +- `precision`(int) [optional] دقت، تعداد ارقام اعشار برای حفظ، فقط برای انواع عددی قابل اجرا است + +- `options` (array[string]) [optional] مقادیر گزینه های کشویی، فقط در صورتی که `type` `string` باشد قابل اجرا است، اگر تنظیم نشده باشد یا پوچ باشد، مقادیر گزینه محدود نمی شوند + +### PriceConfig + +- `input` (float) قیمت ورودی، یعنی قیمت Prompt +- `output` (float) قیمت خروجی، یعنی قیمت محتوای برگردانده شده +- `unit` (float) واحد قیمت گذاری، مانند اگر قیمت بر حسب 1M توکن اندازه گیری شود، مقدار توکن مربوط به قیمت واحد `0.000001` است. +- `currency` (string) واحد پول + +### ProviderCredentialSchema + +- `credential_form_schemas` (array[[CredentialFormSchema](#CredentialFormSchema)]) استاندارد فرم اعتبار + +### ModelCredentialSchema + +- `model` (object) شناسه مدل، نام متغیر به طور پیش فرض `model` است + - `label` (object) نام نمایش آیتم فرم مدل + - `en_US` (string) انگلیسی + - `zh_Hans`(string) [optional] چینی + - `placeholder` (object) محتوای پیام آیتم فرم مدل + - `en_US`(string) انگلیسی + - `zh_Hans`(string) [optional] چینی +- `credential_form_schemas` (array[[CredentialFormSchema](#CredentialFormSchema)]) استاندارد فرم اعتبار + +### CredentialFormSchema + +- `variable` (string) نام متغیر آیتم فرم +- `label` (object) نام برچسب آیتم فرم + - `en_US`(string) انگلیسی + - `zh_Hans` (string) [optional] چینی +- `type` ([FormType](#FormType)) نوع آیتم فرم +- `required` (bool) آیا الزامی است +- `default`(string) مقدار پیش فرض +- `options` (array[[FormOption](#FormOption)]) ویژگی خاص آیتم های فرم از نوع `select` یا `radio`، تعریف محتوای کشویی +- `placeholder`(object) ویژگی خاص آیتم های فرم از نوع `text-input`، محتوای جایگزین + - `en_US`(string) انگلیسی + - `zh_Hans` (string) [optional] چینی +- `max_length` (int) ویژگی خاص آیتم های فرم از نوع `text-input`، تعریف حداکثر طول ورودی، 0 برای بدون محدودیت. +- `show_on` (array[[FormShowOnObject](#FormShowOnObject)]) در صورتیکه مقادیر آیتم فرم دیگر شرایط خاصی را برآورده کنند، نمایش داده می شود، در صورت خالی بودن، همیشه نمایش داده می شود. + +### FormType + +- `text-input` کامپوننت ورودی متن +- `secret-input` کامپوننت ورودی رمز عبور +- `select` کشویی انتخاب تک +- `radio` کامپوننت رادیویی +- `switch` کامپوننت سوئیچ، فقط مقادیر `true` و `false` را پشتیبانی می کند + +### FormOption + +- `label` (object) برچسب + - `en_US`(string) انگلیسی + - `zh_Hans`(string) [optional] چینی +- `value` (string) مقدار گزینه کشویی +- `show_on` (array[[FormShowOnObject](#FormShowOnObject)]) در صورتیکه مقادیر آیتم فرم دیگر شرایط خاصی را برآورده کنند، نمایش داده می شود، در صورت خالی بودن، همیشه نمایش داده می شود. + +### FormShowOnObject + +- `variable` (string) نام متغیر آیتم های فرم دیگر +- `value` (string) مقدار متغیر آیتم های فرم دیگر + + diff --git a/fa/guides/monitoring/README.md b/fa/guides/monitoring/README.md new file mode 100644 index 000000000..bf477301f --- /dev/null +++ b/fa/guides/monitoring/README.md @@ -0,0 +1,5 @@ +# نظارت + +می‌توانید عملکرد برنامه خود را در محیط تولید در بخش **Overview** رصد و پیگیری کنید. در داشبورد تحلیل داده‌ها، می‌توانید شاخص‌های مختلفی مانند هزینه‌های استفاده، تأخیر، بازخورد کاربران و عملکرد در محیط تولید را تجزیه و تحلیل کنید. با اشکال‌زدایی و تکرار مداوم، می‌توانید برنامه خود را به طور مداوم بهبود ببخشید. + +

نمای کلی

diff --git a/fa/guides/monitoring/analysis.md b/fa/guides/monitoring/analysis.md new file mode 100644 index 000000000..5e44eb2d7 --- /dev/null +++ b/fa/guides/monitoring/analysis.md @@ -0,0 +1,35 @@ +# تجزیه و تحلیل داده‌ها + +بخش **بررسی اجمالی - تجزیه و تحلیل داده‌ها** معیارهایی مانند میزان استفاده، کاربران فعال و هزینه‌های فراخوانی LLM (مدل یادگیری زبان) را نمایش می‌دهد. این به شما امکان می‌دهد تا کارایی، تعامل و هزینه‌های عملیاتی برنامه خود را به طور مداوم بهبود ببخشید. ما به تدریج قابلیت‌های تجسم مفیدتری را ارائه خواهیم کرد، بنابراین لطفاً به ما اطلاع دهید که به چه چیزی نیاز دارید. + +

بررسی اجمالی - تجزیه و تحلیل داده‌ها

+ +*** + +**کل پیام‌ها** + +تعداد کل تعاملات روزانه بین کاربران و هوش مصنوعی را نشان می‌دهد. هر بار که هوش مصنوعی به سؤالی از کاربر پاسخ می‌دهد، به عنوان یک پیام حساب می‌شود. تنظیمات درخواست و جلسات رفع اشکال شامل نمی‌شوند. + +**کاربران فعال** + +تعداد کاربران منحصر به فردی که تعاملات موثری با هوش مصنوعی داشته‌اند، که به عنوان داشتن بیش از یک تبادل پرسش و پاسخ تعریف شده است. تنظیمات درخواست و جلسات رفع اشکال شامل نمی‌شوند. + +**میانگین تعاملات جلسه** + +تعداد تعاملات مداوم به ازای هر کاربر جلسه را نشان می‌دهد. به عنوان مثال، اگر کاربری 10 دور پرسش و پاسخ با هوش مصنوعی داشته باشد، به عنوان 10 حساب می‌شود. این معیار نشان دهنده تعامل کاربر است. این فقط برای برنامه‌های مکالمه‌ای در دسترس است. + +**سرعت خروجی نشانه‌ها** + +تعداد نشانه‌های خروجی در هر ثانیه، به طور غیرمستقیم نشان دهنده نرخ تولید مدل و فرکانس استفاده از برنامه است. + +**نرخ رضایت کاربر** + +تعداد لایک به ازای 1000 پیام، نشان دهنده نسبت کاربرانی است که از پاسخ‌ها بسیار راضی هستند. + +**مصرف نشانه‌ها** + +هزینه روزانه نشانه‌ها برای درخواست‌های مدل زبان توسط برنامه را نشان می‌دهد، که برای کنترل هزینه مفید است. + +**کل مکالمات** + +تعداد روزانه مکالمات هوش مصنوعی؛ هر جلسه مکالمه جدید به عنوان یک حساب می‌شود. یک جلسه مکالمه واحد ممکن است شامل چندین تبادل پیام باشد؛ پیام‌های مربوط به مهندسی درخواست و رفع اشکال شامل نمی‌شوند. diff --git a/fa/guides/monitoring/integrate-external-ops-tools/README.md b/fa/guides/monitoring/integrate-external-ops-tools/README.md new file mode 100644 index 000000000..d867054ed --- /dev/null +++ b/fa/guides/monitoring/integrate-external-ops-tools/README.md @@ -0,0 +1,31 @@ +# ادغام ابزارهای عملیاتی خارجی + +### چرا ابزارهای LLMOps ضروری هستند + +در حالی که مدل‌های زبانی بزرگ (LLM) توانایی‌های استدلال و تولید متن استثنایی دارند، عملکرد داخلی آن‌ها هنوز به طور کامل درک نشده است و این موضوع چالش‌هایی را برای توسعه برنامه‌های مبتنی بر LLM ایجاد می‌کند. برای مثال: + +* ارزیابی کیفیت خروجی +* ارزیابی هزینه‌های استنباط +* اندازه‌گیری تأخیر پاسخ مدل +* **پیچیدگی عیب‌یابی** معرفی شده توسط زنجیره‌های تماس، عوامل و ابزارها +* درک مقاصد پیچیده کاربر + +ابزارهایی مانند LangSmith و Langfuse که به عنوان ابزارهای LLMOps شناخته می‌شوند، قابلیت‌های ردیابی جامع و ارزیابی عمیق برای برنامه‌های LLM ارائه می‌دهند و پشتیبانی کامل چرخه عمر را از نمونه‌سازی تا تولید و عملیات برای توسعه‌دهندگان ارائه می‌دهند. + +* #### فاز نمونه‌سازی + +در فاز نمونه‌سازی، برنامه‌های LLM معمولاً شامل آزمایش سریع با آزمایش دستورالعمل، انتخاب مدل، استراتژی‌های RAG (تولید تقویت شده با بازیابی)، و ترکیبات پارامتر دیگر است. درک سریع عملکرد اجرای مدل در این مرحله بسیار مهم است. ادغام Langfuse ردیابی هر مرحله از اجرای برنامه Dify را امکان‌پذیر می‌کند و دید واضح و اطلاعات عیب‌یابی را ارائه می‌دهد و به توسعه‌دهندگان اجازه می‌دهد تا به سرعت مشکلات را شناسایی کنند و زمان عیب‌یابی را کاهش دهند. + +* **فاز آزمایش** + +در فاز آزمایش، جمع‌آوری داده‌ها به طور مداوم بهبود می‌یابد و عملکرد را افزایش می‌دهد. LangSmith می‌تواند اجراها را به عنوان نمونه به مجموعه داده‌ها اضافه کند و پوشش تست را به سناریوهای دنیای واقعی گسترش دهد. این یک مزیت کلیدی برای داشتن سیستم‌های ورود به سیستم و ارزیابی / آزمایش در همان پلتفرم است. + +* #### فاز تولید + +در محیط تولید، تیم‌های توسعه باید به دقت نقاط داده کلیدی را رصد کنند، مجموعه داده‌های مقایسه‌ای را اضافه کنند، نشانه‌گذاری دستی انجام دهند و نتایج عملیاتی را به طور عمیق تحلیل کنند. به ویژه در طول استفاده از برنامه در مقیاس بزرگ، تیم‌های عملیاتی و داده‌ها باید به طور مداوم هزینه‌ها و عملکرد برنامه را رصد کنند و هم مدل و هم عملکرد برنامه را بهینه‌سازی کنند. + +### ادغام Dify با ابزارهای عملیاتی + +هنگام استفاده از Dify Workflow برای سازماندهی برنامه‌های LLM، این کار معمولاً شامل یک سری گره و منطق با پیچیدگی بالا است. + +ادغام Dify با ابزارهای عملیاتی خارجی به حل مشکل "جعبه سیاه" که اغلب در سازماندهی برنامه‌ها با آن مواجه می‌شویم، کمک می‌کند. توسعه‌دهندگان به سادگی می‌توانند پلتفرم را برای ردیابی داده‌ها و معیارها در طول چرخه عمر برنامه پیکربندی کنند و به راحتی کیفیت، عملکرد و هزینه برنامه‌های LLM ایجاد شده در Dify را ارزیابی کنند. diff --git a/fa/guides/monitoring/integrate-external-ops-tools/integrate-langfuse.md b/fa/guides/monitoring/integrate-external-ops-tools/integrate-langfuse.md new file mode 100644 index 000000000..68eddb08b --- /dev/null +++ b/fa/guides/monitoring/integrate-external-ops-tools/integrate-langfuse.md @@ -0,0 +1,349 @@ +# ادغام Langfuse + +### 1. Langfuse چیست؟ + +Langfuse یک پلتفرم مهندسی LLM منبع باز است که به تیم ها در همکاری در اشکال زدایی، تجزیه و تحلیل و تکرار برنامه های آنها کمک می کند. + +{% hint style="info" %} +معرفی Langfuse: [https://langfuse.com/](https://langfuse.com/) +{% endhint %} + +*** + +### 2. نحوه تنظیم Langfuse + +1. در وبسایت رسمی [Langfuse](https://langfuse.com/) ثبت نام کرده و وارد شوید. +2. یک پروژه در Langfuse ایجاد کنید. پس از ورود به سیستم، برای ایجاد پروژه خودتان بر روی **جدید** در صفحه اصلی کلیک کنید. **پروژه** برای ارتباط با **برنامه ها** در Dify برای نظارت بر داده ها استفاده خواهد شد. + +

ایجاد یک پروژه در Langfuse

+ +یک نام برای پروژه ویرایش کنید. + +

ایجاد یک پروژه در Langfuse

+ +3. اعتبارنامه های API پروژه را ایجاد کنید. در نوار کناری سمت چپ پروژه، بر روی **تنظیمات** کلیک کنید تا تنظیمات باز شود. + +

ایجاد اعتبارنامه های API پروژه

+ +در تنظیمات، برای ایجاد اعتبارنامه های API پروژه بر روی **کلیدهای API را ایجاد کنید** کلیک کنید. + +

ایجاد اعتبارنامه های API پروژه

+ +**کلید مخفی، کلید عمومی** و **میزبان** را کپی و ذخیره کنید. + +

دریافت پیکربندی کلید API

+ +4. Langfuse را در Dify پیکربندی کنید. برنامه مورد نظر خود را برای نظارت باز کنید، **نظارت** را در منوی کناری باز کنید و **ردیابی عملکرد برنامه** را در صفحه انتخاب کنید. + +

پیکربندی Langfuse

+ +پس از کلیک بر روی پیکربندی، **کلید مخفی، کلید عمومی، میزبان** ایجاد شده در Langfuse را در پیکربندی جایگذاری کرده و ذخیره کنید. + +

پیکربندی Langfuse

+ +پس از ذخیره سازی موفقیت آمیز، می توانید وضعیت را در صفحه فعلی مشاهده کنید. اگر شروع نشان داده می شود، تحت نظارت است. + +

مشاهده وضعیت پیکربندی

+ +*** + +### 3. مشاهده داده های نظارت در Langfuse + +پس از پیکربندی، می توان داده های اشکال زدایی یا تولید برنامه در Dify را در Langfuse مشاهده کرد. + +

اشکال زدایی برنامه ها در Dify

+ +

مشاهده داده های برنامه در Langfuse

+ +*** + +### 4 لیست داده های نظارت + +#### ردیابی اطلاعات Workflow و Chatflow + +**ردیابی workflow و chatflow** + +| Workflow | ردیابی LangFuse | +| ---------------------------------------- | ----------------------- | +| workflow\_app\_log\_id/workflow\_run\_id | id | +| user\_session\_id | user\_id | +| workflow\_{id} | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | input | +| outputs | output | +| مصرف توکن مدل | usage | +| metadata | metadata | +| error | level | +| error | status\_message | +| \[workflow] | tags | +| \["message", conversation\_mode] | session\_id | +| conversion\_id | parent\_observation\_id | + +**اطلاعات ردیابی Workflow** + +* workflow\_id - شناسه منحصر به فرد Workflow +* conversation\_id - شناسه مکالمه +* workflow\_run\_id - شناسه Workflow این زمان اجرا +* tenant\_id - شناسه مستاجر +* elapsed\_time - زمان سپری شده در این زمان اجرا +* status - وضعیت زمان اجرا +* version - نسخه Workflow +* total\_tokens - کل توکن مورد استفاده در این زمان اجرا +* file\_list - لیست فایل های پردازش شده +* triggered\_from - منبعی که این زمان اجرا را فعال کرده است +* workflow\_run\_inputs - ورودی این workflow +* workflow\_run\_outputs - خروجی این workflow +* error - پیام خطا +* query - پرس و جوهایی که در زمان اجرا استفاده شده است +* workflow\_app\_log\_id - شناسه لاگ برنامه Workflow +* message\_id - شناسه پیام مرتبط +* start\_time - زمان شروع این زمان اجرا +* end\_time - زمان پایان این زمان اجرا +* workflow node executions - اطلاعات زمان اجرای گره Workflow +* Metadata + * workflow\_id - شناسه منحصر به فرد Workflow + * conversation\_id - شناسه مکالمه + * workflow\_run\_id - شناسه Workflow این زمان اجرا + * tenant\_id - شناسه مستاجر + * elapsed\_time - زمان سپری شده در این زمان اجرا + * status - وضعیت عملیاتی + * version - نسخه Workflow + * total\_tokens - کل توکن مورد استفاده در این زمان اجرا + * file\_list - لیست فایل های پردازش شده + * triggered\_from - منبعی که این زمان اجرا را فعال کرده است + +#### اطلاعات ردیابی پیام + +**برای ردیابی مکالمه llm** + +| پیام | ردیابی/تولید LangFuse | +| -------------------------------- | ------------------------- | +| message\_id | id | +| user\_session\_id | user\_id | +| message\_{id} | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | input | +| outputs | output | +| مصرف توکن مدل | usage | +| metadata | metadata | +| error | level | +| error | status\_message | +| \["message", conversation\_mode] | tags | +| conversation\_id | session\_id | +| conversion\_id | parent\_observation\_id | + +**اطلاعات ردیابی پیام** + +* message\_id - شناسه پیام +* message\_data - داده های پیام +* user\_session\_id - شناسه جلسه برای کاربر +* conversation\_model - مدل مکالمه +* message\_tokens - توکن های پیام +* answer\_tokens - توکن های پاسخ +* total\_tokens - کل توکن ها از پیام و پاسخ +* error - پیام خطا +* inputs - داده های ورودی +* outputs - داده های خروجی +* file\_list - لیست فایل های پردازش شده +* start\_time - زمان شروع +* end\_time - زمان پایان +* message\_file\_data - پیام مربوط به داده های فایل +* conversation\_mode - حالت مکالمه +* Metadata + * conversation\_id - شناسه مکالمه + * ls\_provider - ارائه دهنده مدل + * ls\_model\_name - شناسه مدل + * status - وضعیت پیام + * from\_end\_user\_id - شناسه کاربر فرستنده + * from\_account\_id - شناسه حساب فرستنده + * agent\_based - آیا مبتنی بر عامل است + * workflow\_run\_id - شناسه Workflow این زمان اجرا + * from\_source - منبع پیام + * message\_id - شناسه پیام + +#### اطلاعات ردیابی تعدیل + +**برای ردیابی تعدیل مکالمه** + +| تعدیل | ردیابی/تولید LangFuse | +| ------------- | ------------------------- | +| user\_id | user\_id | +| moderation | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | input | +| outputs | output | +| metadata | metadata | +| \[moderation] | tags | +| message\_id | parent\_observation\_id | + +**اطلاعات ردیابی پیام** + +* message\_id - شناسه پیام +* user\_id - شناسه کاربر +* workflow\_app\_log\_id workflow\_app\_log\_id +* inputs - داده های ورودی برای بررسی +* message\_data - داده های پیام +* flagged - اینکه برای توجه علامت گذاری شده است +* action - اقدامات خاص برای اجرا +* preset\_response - پاسخ از پیش تعیین شده +* start\_time - زمان شروع بررسی +* end\_time - زمان پایان بررسی +* Metadata + * message\_id - شناسه پیام + * action - اقدامات خاص برای اجرا + * preset\_response - پاسخ از پیش تعیین شده + +#### اطلاعات ردیابی سوالات پیشنهادی + +**برای ردیابی سوالات پیشنهادی** + +| سوال پیشنهادی | ردیابی/تولید LangFuse | +| ---------------------- | ------------------------- | +| user\_id | user\_id | +| suggested\_question | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | input | +| outputs | output | +| metadata | metadata | +| \[suggested\_question] | tags | +| message\_id | parent\_observation\_id | + +**اطلاعات ردیابی پیام** + +* message\_id - شناسه پیام +* message\_data - داده های پیام +* inputs - داده های ورودی +* outputs - داده های خروجی +* start\_time - زمان شروع +* end\_time - زمان پایان +* total\_tokens - کل توکن ها +* status - وضعیت پیام +* error - پیام خطا +* from\_account\_id - شناسه حساب فرستنده +* agent\_based - آیا مبتنی بر عامل است +* from\_source - منبع پیام +* model\_provider - ارائه دهنده مدل +* model\_id - شناسه مدل +* suggested\_question - سوال پیشنهادی +* level - سطح وضعیت +* status\_message - وضعیت پیام +* Metadata + * message\_id - شناسه پیام + * ls\_provider - ارائه دهنده مدل + * ls\_model\_name - شناسه مدل + * status - وضعیت پیام + * from\_end\_user\_id - شناسه کاربر فرستنده + * from\_account\_id - شناسه حساب فرستنده + * workflow\_run\_id - شناسه Workflow این زمان اجرا + * from\_source - منبع پیام + +#### اطلاعات ردیابی بازیابی مجموعه داده ها + +**برای ردیابی بازیابی پایگاه دانش** + +| بازیابی مجموعه داده | ردیابی/تولید LangFuse | +| --------------------- | ------------------------- | +| user\_id | user\_id | +| dataset\_retrieval | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | input | +| outputs | output | +| metadata | metadata | +| \[dataset\_retrieval] | tags | +| message\_id | parent\_observation\_id | + +**اطلاعات ردیابی بازیابی مجموعه داده ها** + +* message\_id - شناسه پیام +* inputs - پیام ورودی +* documents - داده های سند +* start\_time - زمان شروع +* end\_time - زمان پایان +* message\_data - داده های پیام +* Metadata + * message\_id - شناسه پیام + * ls\_provider - ارائه دهنده مدل + * ls\_model\_name - شناسه مدل + * status - وضعیت مدل + * from\_end\_user\_id - شناسه کاربر فرستنده + * from\_account\_id - شناسه حساب فرستنده + * agent\_based - آیا مبتنی بر عامل است + * workflow\_run\_id - شناسه Workflow این زمان اجرا + * from\_source - منبع پیام + +#### اطلاعات ردیابی ابزار + +**برای ردیابی فراخوانی ابزار** + +| ابزار | ردیابی/تولید LangFuse | +| --------------------- | ------------------------- | +| user\_id | user\_id | +| tool\_name | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | input | +| outputs | output | +| metadata | metadata | +| \["tool", tool\_name] | tags | +| message\_id | parent\_observation\_id | + +**اطلاعات ردیابی ابزار** + +* message\_id - شناسه پیام +* tool\_name - نام ابزار +* start\_time - زمان شروع +* end\_time - زمان پایان +* tool\_inputs - ورودی های ابزار +* tool\_outputs - خروجی های ابزار +* message\_data - داده های پیام +* error - پیام خطا، اگر وجود داشته باشد +* inputs - ورودی پیام +* outputs - خروجی پیام +* tool\_config - پیکربندی ابزار +* time\_cost - هزینه زمان +* tool\_parameters - پارامترهای ابزار +* file\_url - URL مربوط به فایل ها +* Metadata + * message\_id - شناسه پیام + * tool\_name - نام ابزار + * tool\_inputs - ورودی های ابزار + * tool\_outputs - خروجی های ابزار + * tool\_config - پیکربندی ابزار + * time\_cost - هزینه زمان + * error - پیام خطا + * tool\_parameters - پارامترهای ابزار + * message\_file\_id - شناسه فایل پیام + * created\_by\_role - ایجاد شده توسط نقش + * created\_user\_id - شناسه کاربر ایجاد کننده + +#### ردیابی نام تولید شده + +**برای ردیابی تولید عنوان مکالمه** + +| تولید نام | ردیابی/تولید LangFuse | +| ----------------- | ------------------------- | +| user\_id | user\_id | +| generate\_name | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | input | +| outputs | output | +| metadata | metadata | +| \[generate\_name] | tags | + +**اطلاعات ردیابی نام تولید شده** + +* conversation\_id - شناسه مکالمه +* inputs - داده های ورودی +* outputs - نام جلسه تولید شده +* start\_time - زمان شروع +* end\_time - زمان پایان +* tenant\_id - شناسه مستاجر +* Metadata + * conversation\_id - شناسه مکالمه + * tenant\_id - شناسه مستاجر diff --git a/fa/guides/monitoring/integrate-external-ops-tools/integrate-langsmith.md b/fa/guides/monitoring/integrate-external-ops-tools/integrate-langsmith.md new file mode 100644 index 000000000..9e770fc67 --- /dev/null +++ b/fa/guides/monitoring/integrate-external-ops-tools/integrate-langsmith.md @@ -0,0 +1,364 @@ +# ادغام LangSmith + +### LangSmith چیست؟ + +LangSmith یک پلتفرم برای ساخت برنامه‌های LLM در سطح تولید است. برای توسعه، همکاری، تست، استقرار و نظارت بر برنامه‌های LLM استفاده می‌شود. + +{% hint style="info" %} +برای اطلاعات بیشتر، لطفا به [LangSmith](https://www.langchain.com/langsmith) مراجعه کنید. +{% endhint %} + +*** + +### نحوه پیکربندی LangSmith + +#### 1. ثبت نام / ورود به [LangSmith](https://www.langchain.com/langsmith) + +#### 2. ایجاد یک پروژه + +یک پروژه در LangSmith ایجاد کنید. پس از ورود به سیستم، برای ایجاد پروژه خود، روی **پروژه جدید** در صفحه اصلی کلیک کنید. **پروژه** برای ارتباط با **برنامه‌های** Dify جهت نظارت بر داده‌ها استفاده خواهد شد. + +

ایجاد یک پروژه در LangSmith

+ +پس از ایجاد، می‌توانید تمام پروژه‌های ایجاد شده را در بخش پروژه‌ها مشاهده کنید. + +

مشاهده پروژه‌های ایجاد شده در LangSmith

+ +#### 3. ایجاد اعتبارنامه‌های پروژه + +تنظیمات پروژه **تنظیمات** را در نوار کناری سمت چپ پیدا کنید. + +

تنظیمات پروژه

+ +برای ایجاد اعتبارنامه‌های پروژه، روی **ایجاد کلید API** کلیک کنید. + +

ایجاد یک کلید API پروژه

+ +**توکن دسترسی شخصی** را برای احراز هویت API بعدی انتخاب کنید. + +

ایجاد یک کلید API

+ +کلید API ایجاد شده را کپی کرده و ذخیره کنید. + +

کپی کلید API

+ +#### 4. ادغام LangSmith با Dify + +LangSmith را در برنامه Dify پیکربندی کنید. برنامه مورد نیاز برای نظارت را باز کنید، **نظارت** را در منوی جانبی باز کنید و **ردیابی عملکرد برنامه** را در صفحه انتخاب کنید. + +

ردیابی عملکرد برنامه

+ +پس از کلیک روی پیکربندی، **کلید API** و **نام پروژه** ایجاد شده در LangSmith را در پیکربندی وارد کنید و ذخیره کنید. + +

پیکربندی LangSmith

+ +{% hint style="info" %} +نام پروژه پیکربندی شده باید با پروژه تنظیم شده در LangSmith مطابقت داشته باشد. اگر نام پروژه‌ها مطابقت نداشته باشد، LangSmith به طور خودکار یک پروژه جدید در حین همگام‌سازی داده‌ها ایجاد می‌کند. +{% endhint %} + +پس از ذخیره موفقیت‌آمیز، می‌توانید وضعیت نظارت را در صفحه فعلی مشاهده کنید. + +

مشاهده وضعیت پیکربندی

+ +### مشاهده داده‌های نظارت در LangSmith + +پس از پیکربندی، می‌توان داده‌های اشکال‌زدایی یا تولید از برنامه‌های Dify را در LangSmith نظارت کرد. + +

اشکال‌زدایی برنامه‌ها در Dify

+ +هنگامی که به LangSmith می‌روید، می‌توانید سوابق عملیات دقیق برنامه‌های Dify را در داشبورد مشاهده کنید. + +

مشاهده داده‌های برنامه در LangSmith

+ +سوابق دقیق عملیات LLM از طریق LangSmith به شما در بهینه‌سازی عملکرد برنامه Dify کمک می‌کند. + +

مشاهده داده‌های برنامه در LangSmith

+ +### لیست داده‌های نظارت + +#### **اطلاعات ردیابی گردش کار / چت‌فلو** + +**برای ردیابی گردش کار و چت‌فلو استفاده می‌شود** + +| گردش کار | زنجیره LangSmith | +| ---------------------------------------- | ---------------------------- | +| workflow\_app\_log\_id/workflow\_run\_id | id | +| user\_session\_id | - در متاداده قرار داده شده است | +| workflow\_{id} | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | inputs | +| outputs | outputs | +| مصرف توکن مدل | usage\_metadata | +| metadata | extra | +| error | error | +| \[ گردش کار ] | tags | +| "conversation\_id/none for workflow" | conversation\_id در متاداده | +| conversion\_id | parent\_run\_id | + +**اطلاعات ردیابی گردش کار** + +* workflow\_id - شناسه منحصر به فرد گردش کار +* conversation\_id - شناسه گفتگو +* workflow\_run\_id - شناسه اجرای فعلی +* tenant\_id - شناسه مستاجر +* elapsed\_time - زمان صرف شده برای اجرای فعلی +* status - وضعیت اجرا +* version - نسخه گردش کار +* total\_tokens - کل توکن‌های استفاده شده در اجرای فعلی +* file\_list - لیست فایل‌های پردازش شده +* triggered\_from - منبعی که اجرای فعلی را فعال کرده است +* workflow\_run\_inputs - داده‌های ورودی برای اجرای فعلی +* workflow\_run\_outputs - داده‌های خروجی برای اجرای فعلی +* error - خطاهایی که در طول اجرای فعلی رخ داده است +* query - جستجو استفاده شده در طول اجرا +* workflow\_app\_log\_id - شناسه لاگ برنامه گردش کار +* message\_id - شناسه پیام مرتبط +* start\_time - زمان شروع اجرا +* end\_time - زمان پایان اجرا +* workflow node executions - اطلاعات مربوط به اجرای گره‌های گردش کار +* متاداده + * workflow\_id - شناسه منحصر به فرد گردش کار + * conversation\_id - شناسه گفتگو + * workflow\_run\_id - شناسه اجرای فعلی + * tenant\_id - شناسه مستاجر + * elapsed\_time - زمان صرف شده برای اجرای فعلی + * status - وضعیت اجرا + * version - نسخه گردش کار + * total\_tokens - کل توکن‌های استفاده شده در اجرای فعلی + * file\_list - لیست فایل‌های پردازش شده + * triggered\_from - منبعی که اجرای فعلی را فعال کرده است + +#### **اطلاعات ردیابی پیام** + +**برای ردیابی گفتگوهای مرتبط با LLM استفاده می‌شود** + +| چت | LLM LangSmith | +| -------------------------------- | ---------------------------- | +| message\_id | id | +| user\_session\_id | - در متاداده قرار داده شده است | +| “message\_{id}" | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | inputs | +| outputs | outputs | +| مصرف توکن مدل | usage\_metadata | +| metadata | extra | +| error | error | +| \["message", conversation\_mode] | tags | +| conversation\_id | conversation\_id در متاداده | +| conversion\_id | parent\_run\_id | + +**اطلاعات ردیابی پیام** + +* message\_id - شناسه پیام +* message\_data - داده‌های پیام +* user\_session\_id - شناسه جلسه کاربری +* conversation\_model - حالت گفتگو +* message\_tokens - تعداد توکن‌ها در پیام +* answer\_tokens - تعداد توکن‌ها در پاسخ +* total\_tokens - کل تعداد توکن‌ها در پیام و پاسخ +* error - اطلاعات خطا +* inputs - داده‌های ورودی +* outputs - داده‌های خروجی +* file\_list - لیست فایل‌های پردازش شده +* start\_time - زمان شروع +* end\_time - زمان پایان +* message\_file\_data - داده‌های فایل مرتبط با پیام +* conversation\_mode - حالت گفتگو +* متاداده + * conversation\_id - شناسه گفتگو + * ls\_provider - ارائه دهنده مدل + * ls\_model\_name - شناسه مدل + * status - وضعیت پیام + * from\_end\_user\_id - شناسه کاربری فرستنده + * from\_account\_id - شناسه حساب فرستنده + * agent\_based - آیا پیام مبتنی بر عامل است + * workflow\_run\_id - شناسه اجرای گردش کار + * from\_source - منبع پیام + +#### **اطلاعات ردیابی تعدیل** + +**برای ردیابی تعدیل گفتگو استفاده می‌شود** + +| تعدیل | ابزار LangSmith | +| --------------- | -------------------- | +| user\_id | - در متاداده قرار داده شده است | +| “moderation" | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | inputs | +| outputs | outputs | +| metadata | extra | +| \[تعدیل] | tags | +| message\_id | parent\_run\_id | + +**اطلاعات ردیابی تعدیل** + +* message\_id - شناسه پیام +* user\_id: شناسه کاربری +* workflow\_app\_log\_id - شناسه لاگ برنامه گردش کار +* inputs - داده‌های ورودی تعدیل +* message\_data - داده‌های پیام +* flagged - آیا محتوا برای توجه علامت گذاری شده است +* action - اقدامات خاص انجام شده +* preset\_response - پاسخ از پیش تعیین شده +* start\_time - زمان شروع تعدیل +* end\_time - زمان پایان تعدیل +* متاداده + * message\_id - شناسه پیام + * action - اقدامات خاص انجام شده + * preset\_response - پاسخ از پیش تعیین شده + +#### **اطلاعات ردیابی سوال پیشنهادی** + +**برای ردیابی سوالات پیشنهادی استفاده می‌شود** + +| سوال پیشنهادی | LLM LangSmith | +| ---------------------- | -------------------- | +| user\_id | - در متاداده قرار داده شده است | +| suggested\_question | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | inputs | +| outputs | outputs | +| metadata | extra | +| \[suggested\_question] | tags | +| message\_id | parent\_run\_id | + +**اطلاعات ردیابی پیام** + +* message\_id - شناسه پیام +* message\_data - داده‌های پیام +* inputs - محتوای ورودی +* outputs - محتوای خروجی +* start\_time - زمان شروع +* end\_time - زمان پایان +* total\_tokens - تعداد توکن‌ها +* status - وضعیت پیام +* error - اطلاعات خطا +* from\_account\_id - شناسه حساب فرستنده +* agent\_based - آیا پیام مبتنی بر عامل است +* from\_source - منبع پیام +* model\_provider - ارائه دهنده مدل +* model\_id - شناسه مدل +* suggested\_question - سوال پیشنهادی +* level - سطح وضعیت +* status\_message - پیام وضعیت +* متاداده + * message\_id - شناسه پیام + * ls\_provider - ارائه دهنده مدل + * ls\_model\_name - شناسه مدل + * status - وضعیت پیام + * from\_end\_user\_id - شناسه کاربری فرستنده + * from\_account\_id - شناسه حساب فرستنده + * workflow\_run\_id - شناسه اجرای گردش کار + * from\_source - منبع پیام + +#### **اطلاعات ردیابی بازیابی مجموعه داده‌ها** + +**برای ردیابی بازیابی پایگاه دانش استفاده می‌شود** + +| بازیابی مجموعه داده | بازیابی کننده LangSmith | +| --------------------- | -------------------- | +| user\_id | - در متاداده قرار داده شده است | +| dataset\_retrieval | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | inputs | +| outputs | outputs | +| metadata | extra | +| \[dataset\_retrieval] | tags | +| message\_id | parent\_run\_id | + +**اطلاعات ردیابی بازیابی مجموعه داده‌ها** + +* message\_id - شناسه پیام +* inputs - محتوای ورودی +* documents - داده‌های سند +* start\_time - زمان شروع +* end\_time - زمان پایان +* message\_data - داده‌های پیام +* متاداده + * message\_id - شناسه پیام + * ls\_provider - ارائه دهنده مدل + * ls\_model\_name - شناسه مدل + * status - وضعیت پیام + * from\_end\_user\_id - شناسه کاربری فرستنده + * from\_account\_id - شناسه حساب فرستنده + * agent\_based - آیا پیام مبتنی بر عامل است + * workflow\_run\_id - شناسه اجرای گردش کار + * from\_source - منبع پیام + +#### **اطلاعات ردیابی ابزار** + +**برای ردیابی فراخوانی ابزار استفاده می‌شود** + +| ابزار | ابزار LangSmith | +| --------------------- | -------------------- | +| user\_id | - در متاداده قرار داده شده است | +| tool\_name | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | inputs | +| outputs | outputs | +| metadata | extra | +| \["tool", tool\_name] | tags | +| message\_id | parent\_run\_id | + +#### **اطلاعات ردیابی ابزار** + +* message\_id - شناسه پیام +* tool\_name - نام ابزار +* start\_time - زمان شروع +* end\_time - زمان پایان +* tool\_inputs - ورودی‌های ابزار +* tool\_outputs - خروجی‌های ابزار +* message\_data - داده‌های پیام +* error - اطلاعات خطا، در صورت وجود +* inputs - ورودی‌های پیام +* outputs - خروجی‌های پیام +* tool\_config - پیکربندی ابزار +* time\_cost - هزینه زمان +* tool\_parameters - پارامترهای ابزار +* file\_url - URL فایل مرتبط +* متاداده + * message\_id - شناسه پیام + * tool\_name - نام ابزار + * tool\_inputs - ورودی‌های ابزار + * tool\_outputs - خروجی‌های ابزار + * tool\_config - پیکربندی ابزار + * time\_cost - هزینه زمان + * error - اطلاعات خطا، در صورت وجود + * tool\_parameters - پارامترهای ابزار + * message\_file\_id - شناسه فایل پیام + * created\_by\_role - نقش سازنده + * created\_user\_id - شناسه کاربری سازنده + +**اطلاعات ردیابی تولید نام** + +**برای ردیابی تولید عنوان گفتگو استفاده می‌شود** + +| تولید نام | ابزار LangSmith | +| ----------------- | -------------------- | +| user\_id | - در متاداده قرار داده شده است | +| generate\_name | name | +| start\_time | start\_time | +| end\_time | end\_time | +| inputs | inputs | +| outputs | outputs | +| metadata | extra | +| \[generate\_name] | tags | + +**اطلاعات ردیابی تولید نام** + +* conversation\_id - شناسه گفتگو +* inputs - داده‌های ورودی +* outputs - نام گفتگوی تولید شده +* start\_time - زمان شروع +* end\_time - زمان پایان +* tenant\_id - شناسه مستاجر +* متاداده + * conversation\_id - شناسه گفتگو + * tenant\_id - شناسه مستاجر + diff --git a/fa/guides/tools/README.md b/fa/guides/tools/README.md new file mode 100644 index 000000000..04ca4e933 --- /dev/null +++ b/fa/guides/tools/README.md @@ -0,0 +1,66 @@ +# ابزارها + +### تعریف ابزار + +ابزارها می توانند قابلیت های مدل های زبانی بزرگ (LLM) را گسترش دهند، مانند انجام جستجو در وب، محاسبات علمی یا تولید تصاویر، و بدین ترتیب توانایی LLM را برای اتصال به دنیای خارجی افزایش می دهند. Dify دو نوع ابزار ارائه می دهد: **ابزارهای داخلی** و **ابزارهای سفارشی**. + +شما می توانید به طور مستقیم از ابزارهای داخلی Dify استفاده کنید، یا به راحتی ابزارهای API سفارشی را وارد کنید (در حال حاضر از مشخصات OpenAPI / Swagger و OpenAI Plugin پشتیبانی می کند). + +#### عملکرد ابزارها: + +1. ابزارها به کاربران امکان می دهد تا برنامه های AI قدرتمندتری در Dify ایجاد کنند. به عنوان مثال، شما می توانید ابزارهای مناسب را برای یک برنامه دستیار هوشمند (Agent) ترتیب دهید که می تواند وظایف پیچیده را از طریق استدلال وظیفه، تجزیه گام به گام و فراخوانی ابزار تکمیل کند. +2. آنها اتصال برنامه شما به سایر سیستم ها یا خدمات و تعامل با محیط خارجی، مانند اجرای کد یا دسترسی به منابع اطلاعاتی اختصاصی را تسهیل می کنند. + +### نحوه پیکربندی ابزارهای داخلی + +

لیست ابزارهای داخلی

+ +Dify در حال حاضر از موارد زیر پشتیبانی می کند: + +
ابزارتوضیحات
جستجوی گوگلابزاری برای انجام جستجو در SERP گوگل و استخراج خلاصه ها و صفحات وب. ورودی باید یک عبارت جستجو باشد.
ویکی پدیاابزاری برای انجام جستجو در ویکی پدیا و استخراج خلاصه ها و صفحات وب.
نقاشی DALL-Eابزاری برای تولید تصاویر با کیفیت بالا از طریق ورودی زبان طبیعی.
خزش وبابزاری برای خزش داده های وب.
WolframAlphaیک موتور دانش محاسباتی قدرتمند که پاسخ های استاندارد شده را بر اساس سوالات ارائه می دهد و قابلیت های محاسباتی ریاضی قوی دارد.
تولید نمودارابزاری برای تولید نمودارهای بصری، که به شما امکان می دهد تا نمودارهای میله ای، نمودارهای خطی، نمودارهای دایره ای و سایر انواع نمودارها را ایجاد کنید.
زمان فعلیابزاری برای پرس و جو در مورد زمان فعلی.
Yahoo Financeابزاری برای به دست آوردن و سازماندهی آخرین اطلاعات مالی، مانند اخبار و نقل قول های سهام.
Stable Diffusionابزاری برای تولید تصاویر که می تواند به صورت محلی با استفاده از stable-diffusion-webui استقرار یابد.
Vectorizerابزاری برای تبدیل سریع و آسان تصاویر PNG و JPG به گرافیک برداری SVG.
یوتیوبابزاری برای بازیابی آمار ویدیوهای کانال یوتیوب.
+ +{% hint style="info" %} +ما از شما دعوت می کنیم تا ابزارهای توسعه یافته خود را به Dify ارائه دهید. برای روش های دقیق در مورد نحوه مشارکت، لطفاً به [مستندات مشارکت توسعه Dify](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) مراجعه کنید. پشتیبانی شما برای ما ارزشمند است. +{% endhint %} + +#### احراز هویت ابزارهای داخلی + +اگر نیاز به استفاده از ابزارهای داخلی Dify دارید، باید قبل از استفاده از آنها، اعتبارنامه های مربوطه را پیکربندی کنید. + +

پیکربندی اعتبارنامه های ابزار داخلی

+ +پس از تأیید موفقیت آمیز اعتبارنامه ها، ابزار وضعیت "مجاز" را نشان می دهد. پس از پیکربندی اعتبارنامه ها، همه اعضای فضای کاری می توانند هنگام ترتیب دادن برنامه ها از این ابزار استفاده کنند. + +### نحوه ایجاد ابزارهای سفارشی + +شما می توانید ابزارهای API سفارشی را در بخش "ابزارها - ابزارهای سفارشی" وارد کنید، که در حال حاضر از مشخصات OpenAPI / Swagger و ChatGPT Plugin پشتیبانی می کند. شما می توانید به طور مستقیم محتوای طرح OpenAPI را paste کنید یا آن را از یک URL وارد کنید. برای مشخصات OpenAPI / Swagger می توانید به [مستندات رسمی](https://swagger.io/specification/) مراجعه کنید. + +در حال حاضر، ابزارها از دو روش احراز هویت پشتیبانی می کنند: بدون احراز هویت و کلید API. + +

ایجاد ابزارهای سفارشی

+ +پس از وارد کردن محتوای طرح، سیستم به طور خودکار پارامترها را در فایل تجزیه می کند و شما می توانید پارامترهای خاص، روش ها و مسیرهای ابزار را مشاهده کنید. همچنین می توانید پارامترهای ابزار را در اینجا تست کنید. + +

تست پارامتر ابزار سفارشی

+ +پس از ایجاد ابزار سفارشی، همه اعضای فضای کاری می توانند هنگام ترتیب دادن برنامه ها در "استودیو" از این ابزار استفاده کنند. + +

اضافه شدن ابزار سفارشی

+ +#### Cloudflare Workers + +همچنین می توانید از [dify-tools-worker](https://github.com/crazywoola/dify-tools-worker) برای استقرار سریع ابزارهای سفارشی استفاده کنید. این ابزار موارد زیر را ارائه می دهد: + +* مسیرهایی که می توانند به Dify وارد شوند `https://difytoolsworker.yourname.workers.dev/doc`، که یک رابط مستندات سازگار با OpenAPI ارائه می دهد. +* کد پیاده سازی API که می تواند به طور مستقیم در Cloudflare Workers استقرار یابد. + +### نحوه استفاده از ابزارها در برنامه ها + +در حال حاضر، شما می توانید هنگام ایجاد **برنامه های دستیار هوشمند** در "استودیو" از ابزارهای پیکربندی شده استفاده کنید. + +

اضافه کردن ابزارها هنگام ایجاد برنامه های دستیار هوشمند

+ +به عنوان مثال، پس از اضافه کردن ابزارها در یک برنامه تحلیل مالی، دستیار هوشمند به طور مستقل در صورت نیاز ابزارها را فراخوانی می کند تا داده های گزارش مالی را query کند، داده ها را تجزیه و تحلیل کند و مکالمه را با کاربر کامل کند. + +

دستیار هوشمند با استفاده از ابزارها برای پاسخ به سوالات در حین مکالمه

+ diff --git a/fa/guides/tools/advanced-tool-integration.md b/fa/guides/tools/advanced-tool-integration.md new file mode 100644 index 000000000..cf40d9b0e --- /dev/null +++ b/fa/guides/tools/advanced-tool-integration.md @@ -0,0 +1,275 @@ +# ادغام ابزار پیشرفته + +قبل از شروع این راهنمای پیشرفته، لطفاً اطمینان حاصل کنید که درک پایه ای از فرآیند ادغام ابزار در Dify دارید. [ادغام سریع](https://docs.dify.ai/tutorials/quick-tool-integration) را برای یک مرور سریع ببینید. + +### رابط ابزار + +ما مجموعه ای از متدهای کمکی را در کلاس `Tool` برای کمک به توسعه دهندگان برای ساخت سریعتر ابزارهای پیچیده تر تعریف کرده ایم. + +#### بازگشت پیام + +Dify از انواع مختلف پیام مانند `text`، `link`، `image` و `file BLOB` پشتیبانی می کند. شما می توانید انواع مختلفی از پیام ها را از طریق رابط های زیر به LLM و کاربران برگردانید. + +لطفاً توجه داشته باشید که برخی از پارامترها در رابط های زیر در بخش های بعدی معرفی خواهند شد. + +**آدرس اینترنتی تصویر** + +شما فقط باید آدرس اینترنتی تصویر را ارسال کنید و Dify به طور خودکار تصویر را دانلود کرده و به کاربر باز می گرداند. + +```python + def create_image_message(self, image: str, save_as: str = '') -> ToolInvokeMessage: + """ + ایجاد یک پیام تصویر + + :param image: آدرس اینترنتی تصویر + :return: پیام تصویر + """ +``` + +**لینک** + +اگر نیاز به بازگشت یک لینک دارید، می توانید از رابط زیر استفاده کنید. + +```python + def create_link_message(self, link: str, save_as: str = '') -> ToolInvokeMessage: + """ + ایجاد یک پیام لینک + + :param link: آدرس اینترنتی لینک + :return: پیام لینک + """ +``` + +**متن** + +اگر نیاز به بازگشت یک پیام متنی دارید، می توانید از رابط زیر استفاده کنید. + +```python + def create_text_message(self, text: str, save_as: str = '') -> ToolInvokeMessage: + """ + ایجاد یک پیام متنی + + :param text: متن پیام + :return: پیام متنی + """ +``` + +**فایل BLOB** + +اگر نیاز به بازگشت داده های خام یک فایل مانند تصاویر، صدا، فیلم، PPT، Word، Excel و غیره دارید، می توانید از رابط زیر استفاده کنید. + +* `blob` داده های خام فایل، از نوع بایت +* `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 + """ +``` + +#### ابزارهای میانبر + +در برنامه های مدل بزرگ، دو نیاز متداول داریم: + +* اول، خلاصه کردن یک متن طولانی به طور پیشرفته و سپس ارسال محتوای خلاصه شده به LLM برای جلوگیری از طولانی بودن متن اصلی برای LLM. +* محتوای به دست آمده توسط ابزار یک لینک است و اطلاعات صفحه وب باید قبل از اینکه به LLM برگردانده شود، خزیده شود. + +برای کمک به توسعه دهندگان برای پیاده سازی سریع این دو نیاز، دو ابزار میانبر زیر را ارائه می دهیم. + +**ابزار خلاصه متن** + +این ابزار یک `user_id` و متنی که باید خلاصه شود را دریافت می کند و متن خلاصه شده را بر می گرداند. Dify از مدل پیش فرض فضای کاری فعلی برای خلاصه کردن متن طولانی استفاده می کند. + +```python + def summary(self, user_id: str, content: str) -> str: + """ + خلاصه کردن محتوا + + :param user_id: شناسه کاربر + :param content: محتوا + :return: خلاصه + """ +``` + +**ابزار خزیدن صفحه وب** + +این ابزار یک لینک صفحه وب که باید خزیده شود و یک `user_agent` (که می تواند خالی باشد) را دریافت می کند و رشته ای حاوی اطلاعات صفحه وب را بر می گرداند. `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` یک ابزار تبدیل تصویر برداری است که می تواند تصاویر را به تصاویر برداری تبدیل کند، به طوری که تصاویر را می توان بدون اعوجاج به طور نامحدود بزرگ کرد. در اینجا، ما آیکون PNG تولید شده توسط `DallE3` را به یک تصویر برداری تبدیل می کنیم تا بتوان از آن توسط طراحان استفاده کرد. + +**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_Parameters: Dict[str, Any], + ) -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + فراخوانی ابزارها + """ + client = OpenAI( + api_key=self.runtime.credentials['openai_api_key'], + ) + + # درخواست + prompt = tool_Parameters.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 برای تبدیل آیکون PNG تولید شده توسط DallE3 به یک تصویر برداری استفاده می کنیم. بیایید توابعی را که در اینجا تعریف کرده ایم، مرور کنیم. کد به شرح زیر است: + +```python +from core.tools.tool.builtin_tool import BuiltinTool +from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParameter +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_Parameters: Dict[str, Any]) \ + -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + فراخوانی ابزار، نام متغیر تصویر باید از اینجا ارسال شود تا بتوانیم تصویر را از استخر متغیر دریافت کنیم + """ + + + def get_runtime_parameters(self) -> List[ToolParameter]: + """ + فهرست پارامترهای ابزار را دوباره تعریف می کنیم، می توانیم به طور پویا فهرست پارامترها را بر اساس شرایط واقعی در استخر متغیر فعلی ایجاد کنیم تا LLM بتواند فرم را بر اساس فهرست پارامترها ایجاد کند + """ + + + def is_tool_available(self) -> bool: + """ + آیا ابزار فعلی در دسترس است، اگر هیچ تصویری در استخر متغیر فعلی وجود نداشته باشد، پس نیازی به نمایش این ابزار نیست، فقط False را در اینجا برگردانید + """ +``` + +در ادامه، این سه تابع را پیاده سازی می کنیم + +```python +from core.tools.tool.builtin_tool import BuiltinTool +from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParameter +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_Parameters: 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 را وارد کنید') + + # دریافت image_id، تعریف image_id را می توان در get_runtime_parameters یافت + image_id = tool_Parameters.get('image_id', '') + if not image_id: + return self.create_text_message('لطفاً شناسه تصویر را وارد کنید') + + # دریافت تصویر تولید شده توسط 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[ToolParameter]: + """ + پارامترهای زمان اجرا را دوباره تعریف می کنیم + """ + # در اینجا، فهرست پارامترهای ابزار را دوباره تعریف می کنیم، image_id را تعریف می کنیم و فهرست گزینه های آن را به همه تصاویر در استخر متغیر فعلی تنظیم می کنیم. پیکربندی اینجا با پیکربندی در yaml مطابقت دارد. + return [ + ToolParameter.get_simple_instance( + name='image_id', + llm_description=f'شناسه تصویری که می خواهید برداری کنید، \ + و شناسه تصویر باید در \ + {[i.name for i in self.list_default_image_variables()]} مشخص شود.', + type=ToolParameter.ToolParameterType.SELECT, + required=True, + options=[i.name for i in self.list_default_image_variables()] + ) + ] + + def is_tool_available(self) -> bool: + # فقط وقتی تصاویر در استخر متغیر وجود داشته باشد، LLM باید از این ابزار استفاده کند + return len(self.list_default_image_variables()) > 0 +``` + +لازم به ذکر است که در اینجا از `image_id` استفاده نکردیم. فرض کردیم که هنگام فراخوانی این ابزار، باید یک تصویر در استخر متغیر پیش فرض وجود داشته باشد، بنابراین به طور مستقیم از `image_binary = self.get_variable_file(self.VARIABLE_KEY.IMAGE)` برای دریافت تصویر استفاده کردیم. در مواردی که قابلیت های مدل ضعیف است، به توسعه دهندگان توصیه می کنیم که همین کار را انجام دهند که می تواند به طور موثری تحمل خطا را بهبود بخشد و از ارسال پارامترهای نادرست توسط مدل جلوگیری کند. + + diff --git a/fa/guides/tools/quick-tool-integration.md b/fa/guides/tools/quick-tool-integration.md new file mode 100644 index 000000000..adaa7e012 --- /dev/null +++ b/fa/guides/tools/quick-tool-integration.md @@ -0,0 +1,246 @@ +# ادغام سریع ابزار + +در اینجا، از GoogleSearch به عنوان مثال استفاده خواهیم کرد تا نشان دهیم چگونه یک ابزار را به سرعت ادغام کنیم. + +### 1. آماده سازی فایل YAML ارائه دهنده ابزار + +#### مقدمه + +این فایل YAML یک ارائه دهنده ابزار جدید را اعلام می کند و اطلاعاتی مانند نام ارائه دهنده، آیکون، نویسنده و سایر جزئیات را شامل می شود که توسط فرانت اند برای نمایش بازیابی می شوند. + +#### مثال + +باید یک ماژول `google` (پوشه) زیر `core/tools/provider/builtin` ایجاد کنیم و `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، به عنوان یک ابزار شخص ثالث، از API ارائه شده توسط SerpApi استفاده می کند که برای استفاده به یک API Key نیاز دارد. این به این معنی است که این ابزار برای استفاده به یک گواهی نامه نیاز دارد. برای ابزارهایی مانند `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` باشد، که به ترتیب مربوط به کادر ورودی رمز عبور، کادر ورودی متن، و کادر انتخاب کشویی می شود. اگر به `secret-input` تنظیم شود، محتوای ورودی در فرانت اند مخفی می شود و بکند محتوای ورودی را رمزگذاری می کند. + +### 3. آماده سازی فایل YAML ابزار + +یک ارائه دهنده می تواند چندین ابزار داشته باشد، هر ابزار به یک فایل YAML برای توصیف نیاز دارد، این فایل اطلاعات پایه، پارامترها، خروجی، و غیره ابزار را شامل می شود. + +با استفاده از GoogleSearch به عنوان مثال، باید یک ماژول `tools` زیر ماژول `google` ایجاد کنیم و `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 از این ابزار، پیشنهاد می شود اطلاعات دقیق در مورد این ابزار را به طور کامل در اینجا بنویسید، تا 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 از این پارامتر، پیشنهاد می شود اطلاعات دقیق در مورد این پارامتر را به طور کامل در اینجا بنویسید، تا LLM بتواند این پارامتر را درک کند + form: llm # نوع فرم، llm به این معنی است که این پارامتر باید توسط Agent استنتاج شود، فرانت اند این پارامتر را نمایش نخواهد داد + - 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` چهار نوع پشتیبانی می کند، که به ترتیب مربوط به رشته، عدد، بولی، کادر انتخاب کشویی می شود. + * `required` الزامی بودن یا نبودن + * در حالت `llm`، اگر پارامتر الزامی باشد، Agent ملزم به استنتاج این پارامتر است. + * در حالت `form`، اگر پارامتر الزامی باشد، کاربر ملزم به پر کردن این پارامتر در فرانت اند قبل از شروع مکالمه است. + * `options` گزینه های پارامتر + * در حالت `llm`، Dify تمام گزینه ها را به LLM منتقل می کند، LLM می تواند بر اساس این گزینه ها استنتاج کند. + * در حالت `form`، هنگامی که `type` برابر با `select` است، فرانت اند این گزینه ها را نمایش خواهد داد. + * `default` مقدار پیش فرض + * `label` برچسب پارامتر، برای نمایش در فرانت اند + * `human_description` مقدمه برای نمایش در فرانت اند، از چندین زبان پشتیبانی می کند. + * `llm_description` مقدمه برای LLM، به منظور درک بهتر LLM از این پارامتر، پیشنهاد می شود اطلاعات دقیق در مورد این پارامتر را به طور کامل در اینجا بنویسید، تا LLM بتواند این پارامتر را درک کند. + * `form` نوع فرم، در حال حاضر از `llm`, `form` دو نوع پشتیبانی می کند، که به ترتیب مربوط به استنتاج خودکار Agent و پر کردن توسط فرانت اند می شود. + +### 4. اضافه کردن منطق ابزار + +پس از تکمیل پیکربندی ابزار، می توانیم شروع به نوشتن کد ابزار کنیم که نحوه فراخوانی آن را تعریف می کند. + +`google_search.py` را در زیر ماژول `google/tools` ایجاد کنید، محتوای آن به شرح زیر است. + +```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_parameters: Dict[str, Any], + ) -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]: + """ + invoke tools + """ + query = tool_parameters['query'] + result_type = tool_parameters['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_parameters`، که به ترتیب نشان دهنده شناسه کاربر و پارامترهای ابزار هستند. + +#### بازگرداندن داده ها + +هنگامی که ابزار بازمی گردد، می توانید انتخاب کنید که یک پیام یا چند پیام را بازگردانید، در اینجا یک پیام را بازمی گردانیم، با استفاده از `create_text_message` و `create_link_message` می توان یک پیام متنی یا یک پیام پیوند ایجاد کرد. + +### 5. اضافه کردن کد ارائه دهنده + +در نهایت، باید یک کلاس ارائه دهنده را در زیر ماژول ارائه دهنده ایجاد کنیم تا منطق تأیید اعتبار ارائه دهنده را پیاده سازی کنیم. اگر تأیید اعتبار گواهی نامه با شکست مواجه شود، یک استثنا `ToolProviderCredentialValidationError` را پرتاب خواهد کرد. + +`google.py` را در زیر ماژول `google` ایجاد کنید، محتوای آن به شرح زیر است. + +```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 GoogleSearchTool را بارگیری می کند، اما در این زمان اطلاعات گواهی نامه در داخل آن وجود ندارد. + # 2. سپس باید از متد fork_tool_runtime برای انتقال اطلاعات گواهی نامه فعلی به GoogleSearchTool استفاده کنید. + # 3. در نهایت، آن را فراخوانی کنید، پارامترها باید با توجه به قوانین پارامتر پیکربندی شده در YAML GoogleSearchTool منتقل شوند. + GoogleSearchTool().fork_tool_runtime( + meta={ + "credentials": credentials, + } + ).invoke( + user_id='', + tool_parameters={ + "query": "test", + "result_type": "link" + }, + ) + except Exception as e: + raise ToolProviderCredentialValidationError(str(e)) +``` + +### تکمیل + +پس از تکمیل مراحل فوق، می توانیم این ابزار را در فرانت اند مشاهده کنیم و می توان آن را در Agent استفاده کرد. + +البته، از آنجایی که google\_search به یک گواهی نامه نیاز دارد، قبل از استفاده از آن، باید گواهی نامه خود را در فرانت اند وارد کنید. + +
diff --git a/fa/guides/tools/tool-configuration/README.md b/fa/guides/tools/tool-configuration/README.md new file mode 100644 index 000000000..0bcfe5368 --- /dev/null +++ b/fa/guides/tools/tool-configuration/README.md @@ -0,0 +1,14 @@ +--- +description: درباره ابزارهای مختلف پشتیبانی شده توسط Dify اطلاعات کسب کنید. +--- + +# پیکربندی ابزار + +Dify از ابزارهای مختلفی برای ارتقا قابلیت های برنامه شما پشتیبانی می کند. هر ابزار ویژگی ها و پارامترهای منحصر به فردی دارد، بنابراین ابزاری را انتخاب کنید که متناسب با نیازهای برنامه شما باشد. **قبل از استفاده از آن در Dify، کلید API را از وب سایت رسمی ارائه دهنده ابزار دریافت کنید.** + +## راهنماهای ادغام ابزار + +* [StableDiffusion](stable-diffusion.md): ابزاری برای تولید تصاویر بر اساس پیام های متنی. +* [SearXNG](searxng.md): یک موتور جستجوی متا اینترنت رایگان که نتایج را از خدمات و پایگاه داده های جستجوگر مختلف جمع آوری می کند. + + diff --git a/fa/guides/tools/tool-configuration/alphavantage.md b/fa/guides/tools/tool-configuration/alphavantage.md new file mode 100644 index 000000000..26aa49dec --- /dev/null +++ b/fa/guides/tools/tool-configuration/alphavantage.md @@ -0,0 +1,23 @@ +# ابزار تحلیل سهام AlphaVantage + +> ابزاری که توسط [@zhuhao](https://github.com/hwzhuhao) توسعه یافته است. + +AlphaVantage یک پلتفرم جامع آنلاین است که داده های بازار مالی و API ها را ارائه می دهد و به سرمایه گذاران فردی و توسعه دهندگان امکان دسترسی آسان به نقل قول سهام، شاخص های فنی و تحلیل عمیق سهام را می دهد. Dify ابزار AlphaVantage را یکپارچه کرده است و مراحل زیر برای پیکربندی و استفاده از آن در Dify ارائه شده است. + +## 1. دریافت کلید API AlphaVantage + +برای شروع، از [AlphaVantage](https://www.alphavantage.co/support/#api-key) یک کلید API دریافت کنید. + +## 2. پیکربندی AlphaVantage در Dify + +به داشبورد Dify بروید و `ابزارها > AlphaVantage > مجوزدهی` را انتخاب کنید تا کلید API خود را وارد کنید. + +## 3. اجرای ابزار + +- **در برنامه های Chatflow / Workflow** + +هر دو برنامه Chatflow و Workflow از ادغام بلوک `AlphaVantage` پشتیبانی می کنند. پس از اضافه کردن یک گره، از [متغیرها](https://docs.dify.ai/v/zh-hans/guides/workflow/variables) برای ارجاع به درخواست ورودی کاربر در فیلد "متغیرهای ورودی → کد سهام" استفاده کنید. در گره "پایان"، از متغیرها برای ارجاع به خروجی از بلوک `AlphaVantage` استفاده کنید. + +- **در برنامه های Agent** + +ابزار `AlphaVantage` را در برنامه Agent خود بگنجانید. سپس کاربران می توانند کدهای سهام یا توضیحات عمومی سهام را در رابط گفتگو وارد کنند تا ابزار را فعال کرده و داده های مالی دقیق را دریافت کنند. diff --git a/fa/guides/tools/tool-configuration/bing.md b/fa/guides/tools/tool-configuration/bing.md new file mode 100644 index 000000000..b41a204f8 --- /dev/null +++ b/fa/guides/tools/tool-configuration/bing.md @@ -0,0 +1,29 @@ +# بینگ + +> نویسنده ابزار @Dify. + +ابزار جستجوی بینگ می‌تواند به شما در به‌دست آوردن نتایج جستجوی آنلاین هنگام استفاده از برنامه‌های LLM کمک کند. در زیر مراحل پیکربندی و استفاده از ابزار جستجوی بینگ در Dify آورده شده است. + +## 1. درخواست کلید API بینگ + +لطفاً برای دریافت کلید API در پلتفرم [Azure](https://www.microsoft.com/en-us/bing/apis/bing-web-search-api) درخواست دهید. + +## 2. پر کردن تنظیمات در Dify + +در صفحه ناوبری Dify، روی `ابزارها > Azure > مجوز` کلیک کنید تا کلید API را وارد کنید. + +![](../../../.gitbook/assets/tools-bing.png) + +## 3. استفاده از ابزار + +می‌توانید از ابزار بینگ در انواع برنامه‌های زیر استفاده کنید. + +* **برنامه‌های Chatflow / Workflow** + +هر دو برنامه Chatflow و Workflow از اضافه کردن گره‌های ابزار `Bing` پشتیبانی می‌کنند. + +* **برنامه‌های Agent** + +ابزار `Bing` را در برنامه Agent اضافه کنید، سپس دستور جستجوی آنلاین را برای فراخوانی این ابزار وارد کنید. + + diff --git a/fa/guides/tools/tool-configuration/dall-e.md b/fa/guides/tools/tool-configuration/dall-e.md new file mode 100644 index 000000000..9c8f4ade0 --- /dev/null +++ b/fa/guides/tools/tool-configuration/dall-e.md @@ -0,0 +1,27 @@ +# دلّ-ای + +> نویسنده ابزار @Dify. + +دلّ-ای یک مولد تصویر هوش مصنوعی است که توسط OpenAI توسعه یافته است و تصاویری را بر اساس متن هایی که به آن داده می شود، تولید می کند. Dify ابزار دلّ-ای را ادغام کرده است، و در ادامه مراحل پیکربندی و استفاده از ابزار دلّ-ای در Dify آورده شده است. + +## 1. درخواست کلید API OpenAI + +لطفاً برای دریافت کلید API به [پلتفرم OpenAI](https://platform.openai.com/) مراجعه کنید و مطمئن شوید که حساب شما دارای اعتبار کافی است. + +## 2. پر کردن پیکربندی در Dify + +در صفحه ناوبری Dify، روی `Tools > DALL-E > Authorize` کلیک کنید و کلید API را وارد کنید. + +![](../../../.gitbook/assets/tools-dalle.png) + +## 3. استفاده از ابزار + +* **برنامه های چت فلو/ورک فلو** + +هر دو برنامه چت فلو و ورک فلو از گره ابزار `DALL-E` پشتیبانی می‌کنند. پس از اضافه کردن آن، باید "Input Variables → Prompt" را در گره با [متغیرها](https://docs.dify.ai/guides/workflow/variables) پر کنید تا به متن ورودی کاربر یا محتوای تولید شده توسط گره قبلی اشاره کنید. در نهایت، از متغیر برای اشاره به خروجی تصویر توسط `DALL-E` در گره "End" استفاده کنید. + +* **برنامه های Agent** + +ابزار `DALL-E` را در برنامه Agent اضافه کنید، سپس یک توصیف تصویر را در کادر گفتگو ارسال کنید تا از ابزار برای تولید یک تصویر هوش مصنوعی استفاده کنید. + + diff --git a/fa/guides/tools/tool-configuration/google.md b/fa/guides/tools/tool-configuration/google.md new file mode 100644 index 000000000..debc0adc0 --- /dev/null +++ b/fa/guides/tools/tool-configuration/google.md @@ -0,0 +1,27 @@ +# گوگل + +> نویسنده ابزار @Dify. + +ابزار جستجوی گوگل می‌تواند به شما در دریافت نتایج جستجوی آنلاین هنگام استفاده از برنامه‌های LLM کمک کند. در اینجا مراحل پیکربندی و استفاده از ابزار جستجوی گوگل در Dify آمده است: + +## 1. درخواست برای کلید API Serp + +لطفاً برای دریافت کلید API از [Serp](https://serpapi.com/dashboard) درخواست دهید. + +## 2. پر کردن پیکربندی در Dify + +در صفحه ناوبری Dify، روی `ابزارها > گوگل > به مجوز برو` کلیک کنید تا کلید API را پر کنید. + +![](../../../.gitbook/assets/tools-google.png) + +## 3. استفاده از ابزار + +می‌توانید از ابزار گوگل در انواع برنامه‌های زیر استفاده کنید: + +* **برنامه‌های چت‌فلو / گردش کار** + +هر دو برنامه چت‌فلو و گردش کار از اضافه کردن یک گره ابزار `گوگل` پشتیبانی می‌کنند. + +* **برنامه‌های عامل** + +ابزار `گوگل` را در برنامه Agent اضافه کنید، سپس دستورالعمل‌های جستجوی آنلاین را برای تماس با این ابزار وارد کنید. diff --git a/fa/guides/tools/tool-configuration/perplexity.md b/fa/guides/tools/tool-configuration/perplexity.md new file mode 100644 index 000000000..17bb422c5 --- /dev/null +++ b/fa/guides/tools/tool-configuration/perplexity.md @@ -0,0 +1,33 @@ +# جستجوی پرپلکسیتی + +> نویسنده ابزار @Dify. + +پرپلکسیتی یک موتور جستجوی مبتنی بر هوش مصنوعی است که می‌تواند پرس‌وجوهای پیچیده را درک کند و پاسخ‌های دقیق و مرتبط در زمان واقعی ارائه دهد. در اینجا مراحل پیکربندی و استفاده از ابزار جستجوی پرپلکسیتی در Dify آمده است. + +## 1. درخواست کلید API پرپلکسیتی + +لطفاً برای دریافت کلید API به [پرپلکسیتی](https://www.perplexity.ai/settings/api) مراجعه کنید و اطمینان حاصل کنید که حساب شما اعتبار کافی دارد. + +## 2. پر کردن پیکربندی در Dify + +در صفحه ناوبری Dify، روی `ابزارها > پرپلکسیتی > به تأیید بروید` کلیک کنید تا کلید API را پر کنید. + +![](../../../.gitbook/assets/tools-perplexity.png) + +## 3. استفاده از ابزار + +می‌توانید از ابزار جستجوی پرپلکسیتی در انواع برنامه‌های زیر استفاده کنید. + +* **برنامه‌های چت‌فلوی / گردش کار** + +هر دو برنامه چت‌فلوی و گردش کار از اضافه کردن گره‌های ابزار پرپلکسیتی پشتیبانی می‌کنند. محتوای ورودی کاربر را از طریق متغیرها به جعبه "پرس‌وجو" در گره ابزار پرپلکسیتی ارسال کنید، پارامترهای داخلی ابزار پرپلکسیتی را در صورت نیاز تنظیم کنید و در نهایت محتوای خروجی گره ابزار پرپلکسیتی را در جعبه پاسخ گره "پایان" انتخاب کنید. + +![](../../../.gitbook/assets/tools-chatflow-perplexity.png) + +* **برنامه‌های عامل** + +ابزار `جستجوی پرپلکسیتی` را در برنامه عامل اضافه کنید، سپس دستورات مربوطه را برای فراخوانی این ابزار وارد کنید. + +![](../../../.gitbook/assets/tools-agent-perplexity.png) + + diff --git a/fa/guides/tools/tool-configuration/searchapi.md b/fa/guides/tools/tool-configuration/searchapi.md new file mode 100644 index 000000000..0e241d2f0 --- /dev/null +++ b/fa/guides/tools/tool-configuration/searchapi.md @@ -0,0 +1,31 @@ +# SearchApi + +> نویسنده ابزار @SearchApi. + +SearchApi یک API SERP قدرتمند و بلادرنگ است که داده‌های ساختار یافته را از مجموعه‌ای از موتورهای جستجو از جمله جستجوی گوگل، Google Jobs، YouTube، Google News و موارد دیگر ارائه می‌دهد. در اینجا مراحل پیکربندی و استفاده از ابزار جستجوی SearchApi در Dify آورده شده است. + +## 1. درخواست کلید API SearchApi + +لطفاً برای دریافت کلید API به [SearchApi](https://www.searchapi.io/) مراجعه کنید. + +## 2. پر کردن تنظیمات در Dify + +در صفحه ناوبری Dify، روی `ابزار > SearchApi > رفتن به مجوز` کلیک کنید تا کلید API را پر کنید. + +![](../../../.gitbook/assets/tool-searchapi.png) + +## 3. استفاده از ابزار + +می توانید از ابزار SearchApi در انواع برنامه های زیر استفاده کنید. + +* **برنامه های Chatflow / Workflow** + +هر دو برنامه Chatflow و Workflow از افزودن گره های ابزار سری `SearchApi` پشتیبانی می‌کنند و چهار ابزار را ارائه می‌دهند: Google Jobs API، Google News API، Google Search API و YouTube Scraper API. + +![](../../../.gitbook/assets/tool-searchapi-flow.png) + +* **برنامه های Agent** + +ابزار `SearchApi` مورد نظر خود را برای اضافه کردن در برنامه Agent انتخاب کنید، سپس دستورات را برای فراخوانی ابزار وارد کنید. + + diff --git a/fa/guides/tools/tool-configuration/searxng.md b/fa/guides/tools/tool-configuration/searxng.md new file mode 100644 index 000000000..915190388 --- /dev/null +++ b/fa/guides/tools/tool-configuration/searxng.md @@ -0,0 +1,25 @@ +# SearXNG +SearXNG یک موتور جستجوی متا آزاد است که نتایج را از سرویس‌ها و پایگاه‌های داده مختلف جمع‌آوری می‌کند. کاربران نه ردیابی می‌شوند و نه پروفایل می‌شوند. اکنون می‌توانید مستقیماً از این ابزار در Dify استفاده کنید. + +در زیر مراحل ادغام SearXNG در Dify با استفاده از Docker در [Community Edition](https://docs.dify.ai/getting-started/install-self-hosted/docker-compose) آورده شده است. + +> اگر می‌خواهید از SearXNG در سرویس ابری Dify استفاده کنید، لطفاً به [مستندات نصب SearXNG](https://docs.searxng.org/admin/installation.html) مراجعه کنید تا سرویس خود را راه‌اندازی کنید، سپس به Dify برگردید و آدرس پایه سرویس را در صفحه "ابزارها > SearXNG > احراز هویت" وارد کنید. + +## 1. تغییر فایل پیکربندی Dify + +فایل پیکربندی در مسیر `dify/api/core/tools/provider/builtin/searxng/docker/settings.yml` قرار دارد و می‌توانید به مستندات پیکربندی [اینجا](https://docs.searxng.org/admin/settings/index.html) مراجعه کنید. + +## 2. شروع سرویس + +ظرف Docker را در دایرکتوری ریشه dify راه‌اندازی کنید. + +```bash +cd dify +docker run --rm -d -p 8081:8080 -v "${PWD}/api/core/tools/provider/builtin/searxng/docker:/etc/searxng" searxng/searxng +``` + +## 3. استفاده از SearXNG + +آدرس دسترسی را در "ابزارها > SearXNG > احراز هویت" وارد کنید تا ارتباط بین سرویس Dify و سرویس SearXNG برقرار شود. آدرس داخلی Docker برای SearXNG معمولاً `http://host.docker.internal:8081` است. + + diff --git a/fa/guides/tools/tool-configuration/serper.md b/fa/guides/tools/tool-configuration/serper.md new file mode 100644 index 000000000..41d137c0e --- /dev/null +++ b/fa/guides/tools/tool-configuration/serper.md @@ -0,0 +1,29 @@ +# سرپر + +> نویسنده ابزار @zhuhao. + +سرپر یک API قدرتمند ابزار موتور جستجوی بلادرنگ است که داده‌های ساختاریافته از نتایج موتور جستجوی گوگل را ارائه می‌دهد. مراحل پیکربندی و استفاده از ابزار جستجوی سرپر در دیفای در زیر آمده است. + +## 1. درخواست کلید API سرپر + +لطفاً برای دریافت کلید API از [پلتفرم سرپر](https://serper.dev/signup) درخواست دهید. + +## 2. پر کردن پیکربندی در دیفای + +در صفحه ناوبری دیفای، روی `ابزارها > سرپر > مجوز` کلیک کنید تا کلید API را وارد کنید. + +![](../../../.gitbook/assets/tool-serper.png) + +## 3. استفاده از ابزار + +می‌توانید از ابزار سرپر در انواع برنامه‌های زیر استفاده کنید. + +* **برنامه‌های چت‌فلو / گردش کار** + +هم برنامه‌های چت‌فلو و هم برنامه‌های گردش کار از اضافه کردن گره‌های ابزار `سرپر` پشتیبانی می‌کنند. + +* **برنامه‌های عامل** + +در برنامه‌های عامل، ابزار `سرپر` مورد نظر را انتخاب کرده و سپس دستورات را برای فراخوانی ابزار وارد کنید. + + diff --git a/fa/guides/tools/tool-configuration/siliconflow.md b/fa/guides/tools/tool-configuration/siliconflow.md new file mode 100644 index 000000000..b66f33bab --- /dev/null +++ b/fa/guides/tools/tool-configuration/siliconflow.md @@ -0,0 +1,33 @@ +# سیلیکون‌فلُو (با پشتیبانی Flux AI) + +> نویسنده ابزار @hjlarry. + +سیلیکون‌فلُو خدمات GenAI با کیفیت بالا را بر اساس مدل‌های پایه منبع باز عالی ارائه می‌دهد. شما می‌توانید از سیلیکون‌فلُو در Dify برای فراخوانی مدل‌های تولید تصویر مانند Flux و Stable Diffusion و ساخت برنامه تولید تصویر هوش مصنوعی خودتان استفاده کنید. + +## 1. درخواست کلید API SiliconCloud + +یک کلید API جدید در [صفحه مدیریت API SiliconCloud](https://cloud.siliconflow.cn/account/ak) ایجاد کنید و مطمئن شوید که موجودی کافی دارید. + +## 2. پر کردن پیکربندی در Dify + +در صفحه ابزار Dify، روی `SiliconCloud > To Authorize` کلیک کنید و کلید API را پر کنید. + +
+ +## 3. استفاده از ابزار + +* **برنامه Chatflow/Workflow** + +برنامه‌های Chatflow و Workflow از اضافه کردن گره‌های ابزار `SiliconFlow` پشتیبانی می‌کنند. شما می‌توانید محتوای ورودی کاربر را از طریق [متغیرها](https://docs.dify.ai/v/zh-hans/guides/workflow/variables) به کادرهای "prompt" و "negative prompt" گره ابزار SiliconFlow منتقل کنید، پارامترهای داخلی را به دلخواه تنظیم کنید و در نهایت محتوای خروجی (متن، تصاویر و غیره) گره ابزار SiliconFlow را در کادر پاسخ گره "end" انتخاب کنید. + +
+ +* **برنامه Agent** + +در برنامه Agent، ابزار `Stable Diffusion` یا `Flux` را اضافه کنید، و سپس یک شرح تصویر را در کادر گفتگو ارسال کنید تا ابزار برای تولید تصاویر فراخوانی شود. + +
+ +
+ + diff --git a/fa/guides/tools/tool-configuration/stable-diffusion.md b/fa/guides/tools/tool-configuration/stable-diffusion.md new file mode 100644 index 000000000..a904839a6 --- /dev/null +++ b/fa/guides/tools/tool-configuration/stable-diffusion.md @@ -0,0 +1,73 @@ +# انتشار پایدار + +انتشار پایدار ابزاری برای تولید تصاویر بر اساس پیام های متنی است. دیفای رابط کاربری برای دسترسی به API انتشار پایدار را پیاده سازی کرده است، بنابراین می توانید از آن مستقیماً در دیفای استفاده کنید. مراحل زیر برای ادغام انتشار پایدار در دیفای هستند. + +## 1. مطمئن شوید که یک دستگاه با GPU دارید +انتشار پایدار برای تولید تصاویر به دستگاهی با GPU نیاز دارد. اما این لازم نیست، می توانید از CPU برای تولید تصاویر استفاده کنید، اما این عمل کند خواهد بود. + +## 2. راه اندازی رابط کاربری انتشار پایدار +رابط کاربری انتشار پایدار را روی دستگاه یا سرور محلی خود راه اندازی کنید. + +### 2.1. مخزن رابط کاربری انتشار پایدار را کلون کنید +مخزن رابط کاربری انتشار پایدار را از [مخزن رسمی](https://github.com/AUTOMATIC1111/stable-diffusion-webui) کلون کنید. + +```bash +git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui +``` + +### 2.2. آن را به صورت محلی راه اندازی کنید +پس از کلون کردن مخزن، باید دایرکتوری را به مخزن کلون شده تغییر داده و دستور زیر را برای راه اندازی رابط کاربری انتشار پایدار اجرا کنید. + +#### ویندوز +```bash +cd stable-diffusion-webui +./webui.bat --api --listen +``` + +#### لینوکس +```bash +cd stable-diffusion-webui +./webui.sh --api --listen +``` + +### 2.3. مدل ها را آماده کنید +اکنون می توانید رابط کاربری انتشار پایدار را در مرورگر خود بر اساس آدرس نمایش داده شده در ترمینال دسترسی داشته باشید، اما مدل ها هنوز در دسترس نیستند. شما باید مدل ها را از HuggingFace یا منابع دیگر دانلود کرده و آنها را در دایرکتوری `models` رابط کاربری انتشار پایدار قرار دهید. + +برای مثال، از [pastel-mix](https://huggingface.co/JamesFlare/pastel-mix) به عنوان مدل استفاده می کنیم، از `git lfs` برای دانلود مدل استفاده کنید و آن را در دایرکتوری `models` در `stable-diffusion-webui` قرار دهید. + +```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. انتشار پایدار را در دیفای ادغام کنید +اطلاعاتی را که از مراحل قبلی به دست آوردید در `ابزارها > انتشار پایدار > برای مجوز` پر کنید. + +## 4. پایان + +- **برنامه های چت فلو / گردش کار** + +هر دو برنامه چت فلو و گردش کار از افزودن گره های ابزار `انتشار پایدار` پشتیبانی می کنند. پس از اضافه کردن، باید [متغیر](https://docs.dify.ai/v/zh-hans/guides/workflow/variables) را که به پیام ورودی کاربر یا محتوای تولید شده توسط گره قبلی در بخش "متغیرهای ورودی → پیام" در داخل گره ارجاع می دهد، پر کنید. در نهایت، از یک متغیر برای ارجاع به خروجی تصویر توسط `انتشار پایدار` در گره "پایان" استفاده کنید. + +- **برنامه های عامل** + +ابزار `انتشار پایدار` را در برنامه عامل اضافه کنید، سپس توصیف تصاویر را در کادر گفتگو ارسال کنید تا ابزار را فعال کنید و تصاویر AI را تولید کنید. + + diff --git a/fa/guides/workflow/README.md b/fa/guides/workflow/README.md new file mode 100644 index 000000000..e1e9ffcce --- /dev/null +++ b/fa/guides/workflow/README.md @@ -0,0 +1,47 @@ +# گردش کار + +### معرفی اولیه + +گردش کارها با تقسیم کارهای پیچیده به مراحل کوچکتر (گره ها)، پیچیدگی سیستم را کاهش می‌دهند، وابستگی به مهندسی سریع و قابلیت‌های استنباط مدل را کاهش می‌دهند و عملکرد برنامه‌های LLM را برای وظایف پیچیده بهبود می‌بخشند. این امر همچنین باعث افزایش تعبیر پذیری، پایداری و تحمل خطای سیستم می‌شود. + +گردش کارهای Dify به دو نوع تقسیم می‌شوند: + +* **Chatflow**: برای سناریوهای مکالمه ای، از جمله خدمات مشتری، جستجوی معنایی و سایر برنامه‌های مکالمه ای که به منطق چند مرحله ای در ساخت پاسخ نیاز دارند، طراحی شده است. +* **Workflow**: برای سناریوهای اتوماسیون و پردازش دسته ای مناسب است، که برای ترجمه با کیفیت بالا، تجزیه و تحلیل داده ها، تولید محتوا، اتوماسیون ایمیل و موارد دیگر مناسب است. + +
+ +Chatflow برای رسیدگی به پیچیدگی شناخت نیت کاربر در ورودی زبان طبیعی، گره های درک پرسش را ارائه می‌دهد. در مقایسه با Workflow، پشتیبانی از ویژگی‌های Chatbot مانند سابقه مکالمه (حافظه)، پاسخ‌های با حاشیه نویسی و گره های پاسخ را اضافه می‌کند. + +Workflow برای رسیدگی به منطق پیچیده تجاری در سناریوهای اتوماسیون و پردازش دسته ای، انواع مختلفی از گره های منطقی مانند گره های کد، گره های IF / ELSE، تبدیل الگو، گره های تکرار و موارد دیگر را ارائه می‌دهد. علاوه بر این، قابلیت‌هایی برای اقدامات زمان‌بندی شده و فعال شده توسط رویداد را برای تسهیل ساخت فرآیندهای خودکار ارائه می‌دهد. + +### موارد استفاده رایج + +* خدمات مشتری + +با ادغام LLM در سیستم خدمات مشتری خود، می‌توانید پاسخ‌ها به سؤالات متداول را به طور خودکار انجام دهید و بار کار تیم پشتیبانی خود را کاهش دهید. LLM می‌تواند زمینه و نیت پرسش‌های مشتری را درک کند و پاسخ‌های مفید و دقیق را به موقع تولید کند. + +* تولید محتوا + +چه نیاز به ایجاد پست‌های وبلاگ، توضیحات محصول یا مواد بازاریابی داشته باشید، LLM می‌تواند با تولید محتوای با کیفیت بالا به شما کمک کند. کافیست یک طرح کلی یا موضوع ارائه دهید و LLM از پایگاه دانش گسترده خود برای تولید محتوای جذاب، آموزنده و ساختار یافته استفاده می‌کند. + +* اتوماسیون وظایف + +LLM را می‌توان با سیستم‌های مختلف مدیریت وظیفه مانند Trello، Slack و Lark ادغام کرد تا مدیریت پروژه و وظایف را خودکار کند. LLM با استفاده از پردازش زبان طبیعی می‌تواند ورودی کاربر را درک و تفسیر کند، وظایف ایجاد کند، وضعیت‌ها را به روز کند و بدون مداخله دستی اولویت‌ها را اختصاص دهد. + +* تجزیه و تحلیل داده ها و گزارش دهی + +LLM می‌تواند مجموعه داده‌های بزرگ را تجزیه و تحلیل کند و گزارش‌ها یا خلاصه‌ها تولید کند. LLM با ارائه اطلاعات مربوطه، می‌تواند روندها، الگوها و بینش‌ها را شناسایی کند و داده‌های خام را به اطلاعات قابل عمل تبدیل کند. این برای مشاغلی که به دنبال تصمیم‌گیری مبتنی بر داده هستند، بسیار ارزشمند است. + +* اتوماسیون ایمیل + +LLM را می‌توان برای نوشتن ایمیل، به‌روزرسانی‌های رسانه‌های اجتماعی و سایر اشکال ارتباطات استفاده کرد. LLM با ارائه یک طرح کلی مختصر یا نکات اصلی می‌تواند پیام‌های ساختار یافته، منسجم و متناسب با زمینه را تولید کند. این امر در زمان قابل توجهی صرفه‌جویی می‌کند و اطمینان می‌دهد که پاسخ‌های شما روشن و حرفه‌ای هستند. + +### نحوه شروع + +* با ساخت یک گردش کار از ابتدا یا استفاده از الگوهای سیستم برای کمک به شروع کار خود شروع کنید. +* با عملیات اساسی از جمله ایجاد گره‌ها روی بوم، اتصال و پیکربندی گره‌ها، اشکال‌زدایی گردش کار و مشاهده تاریخچه اجرا آشنا شوید. +* یک گردش کار را ذخیره و منتشر کنید. +* برنامه منتشر شده را اجرا کنید یا از طریق API با گردش کار تماس بگیرید. + + diff --git a/fa/guides/workflow/debug-and-preview/README.md b/fa/guides/workflow/debug-and-preview/README.md new file mode 100644 index 000000000..1c8d47d32 --- /dev/null +++ b/fa/guides/workflow/debug-and-preview/README.md @@ -0,0 +1 @@ +# رفع خطا و پیش نمایش diff --git a/fa/guides/workflow/debug-and-preview/checklist.md b/fa/guides/workflow/debug-and-preview/checklist.md new file mode 100644 index 000000000..57c1bcbba --- /dev/null +++ b/fa/guides/workflow/debug-and-preview/checklist.md @@ -0,0 +1,5 @@ +# لیست چک + +قبل از انتشار برنامه، می‌توانید با استفاده از لیست چک بررسی کنید که آیا گره‌هایی با پیکربندی‌های ناقص یا گره‌هایی که متصل نشده‌اند وجود دارد یا خیر. + +
diff --git a/fa/guides/workflow/debug-and-preview/history.md b/fa/guides/workflow/debug-and-preview/history.md new file mode 100644 index 000000000..39e891254 --- /dev/null +++ b/fa/guides/workflow/debug-and-preview/history.md @@ -0,0 +1,5 @@ +# تاریخچه اجرا + +در "تاریخچه اجرا" ، می توانید نتایج اجرا و اطلاعات ورود به سیستم را از اشکال زدایی تاریخی گردش کار فعلی مشاهده کنید. + +
diff --git a/fa/guides/workflow/debug-and-preview/log.md b/fa/guides/workflow/debug-and-preview/log.md new file mode 100644 index 000000000..de269fc85 --- /dev/null +++ b/fa/guides/workflow/debug-and-preview/log.md @@ -0,0 +1,7 @@ +# لاگ‌های گفتگو/اجرا + +با کلیک بر روی **"تاریخچه اجرا - مشاهده لاگ - جزئیات"** می‌توانید نمای کاملی از اجرا را در بخش جزئیات مشاهده کنید. این شامل اطلاعات در مورد ورودی‌ها و خروجی‌ها، فراداده‌ها و سایر داده‌های مرتبط است. + +این اطلاعات دقیق به شما امکان می‌دهد تا جنبه‌های مختلف هر گره را در طول فرآیند اجرای کامل گردش کار بررسی کنید. می‌توانید ورودی‌ها و خروجی‌ها را بررسی کنید، مصرف نشانه‌ها را تحلیل کنید، مدت زمان اجرا را ارزیابی کنید و سایر معیارهای مرتبط را ارزیابی کنید. + +
diff --git a/fa/guides/workflow/debug-and-preview/step-run.md b/fa/guides/workflow/debug-and-preview/step-run.md new file mode 100644 index 000000000..d1dd16f23 --- /dev/null +++ b/fa/guides/workflow/debug-and-preview/step-run.md @@ -0,0 +1,9 @@ +# اجرای گام به گام + +ورکفلو از اشکال زدایی گام به گام گره ها پشتیبانی می کند که در آن می توانید به طور مکرر تست کنید که آیا اجرای گره فعلی با انتظارات مطابقت دارد یا خیر. + +
+ +پس از اجرای یک تست گام، می توانید وضعیت اجرا، ورودی/خروجی و اطلاعات متاداده را بررسی کنید. + +
diff --git a/fa/guides/workflow/debug-and-preview/yu-lan-yu-yun-hang.md b/fa/guides/workflow/debug-and-preview/yu-lan-yu-yun-hang.md new file mode 100644 index 000000000..361a61c27 --- /dev/null +++ b/fa/guides/workflow/debug-and-preview/yu-lan-yu-yun-hang.md @@ -0,0 +1,11 @@ +# پیش نمایش و اجرا + +Dify Workflow مجموعه ای جامع از ویژگی‌های اجرا و اشکال زدایی را ارائه می‌دهد. در برنامه‌های مکالمه‌ای، کلیک کردن روی "پیش نمایش" وارد حالت اشکال زدایی می‌شود. + +
+ +در برنامه‌های گردش کار، کلیک کردن روی "اجرا" وارد حالت اشکال زدایی می‌شود. + +
+ +هنگامی که در حالت اشکال زدایی قرار دارید، می‌توانید گردش کار پیکربندی شده را با استفاده از رابط سمت راست صفحه اشکال زدایی کنید. diff --git a/fa/guides/workflow/export_import.md b/fa/guides/workflow/export_import.md new file mode 100644 index 000000000..b1a9d53d9 --- /dev/null +++ b/fa/guides/workflow/export_import.md @@ -0,0 +1,15 @@ +# صادرات/واردات + +می‌توانید الگوهای برنامه‌های کاربردی را به عنوان فایل‌های DSL (زبان اختصاصی دامنه) با فرمت YAML در داخل استودیو صادر و وارد کنید تا با اعضای تیم خود به اشتراک بگذارید. + +برای وارد کردن یک فایل DSL در لیست برنامه‌های کاربردی استودیو: + +
+ +برای صادر کردن یک فایل DSL از لیست برنامه‌های کاربردی استودیو: + +
+ +برای صادر کردن یک فایل DSL از صفحه هماهنگی گردش کار: + +
diff --git a/fa/guides/workflow/key-concepts.md b/fa/guides/workflow/key-concepts.md new file mode 100644 index 000000000..ed0be6e52 --- /dev/null +++ b/fa/guides/workflow/key-concepts.md @@ -0,0 +1,37 @@ +# مفاهیم کلیدی + +### گره ها + +**گره ها اجزای اصلی یک گردش کار هستند.** با اتصال گره ها با کارکردهای مختلف، می توانید مجموعه ای از عملیات را در داخل گردش کار اجرا کنید. + +برای گره های اصلی گردش کار، لطفاً به [شرح بلوک](node/) مراجعه کنید. + +*** + +### متغیرها + +**متغیرها برای پیوند ورودی و خروجی گره ها در یک گردش کار استفاده می شوند.**، که امکان اجرای منطق پردازش پیچیده در طول فرآیند را فراهم می کند. برای جزئیات بیشتر، لطفاً به [متغیرها](variables.md) مراجعه کنید. + +*** + +### گفتگوی و گردش کار + +**سناریوهای کاربرد** + +* **گفتگوی**: برای سناریوهای مکالمه ای طراحی شده است، از جمله خدمات مشتری، جستجوی معنایی و سایر برنامه های مکالمه ای که به منطق چند مرحله ای در ساخت پاسخ نیاز دارند. +* **گردش کار**: برای سناریوهای اتوماسیون و پردازش دسته ای مناسب است، برای ترجمه با کیفیت بالا، تجزیه و تحلیل داده ها، تولید محتوا، اتوماسیون ایمیل و موارد دیگر. + +**نقاط ورودی استفاده** + +

ورودی گفتگوی

+ +

ورودی گردش کار

+ +**تفاوت ها در گره های موجود** + +1. گره پایان یک گره انتهایی برای گردش کار است و فقط می تواند در انتهای فرآیند انتخاب شود. +2. گره پاسخ مخصوص گفتگوی است، برای خروجی متنی جریان استفاده می شود و می تواند در مراحل میانی فرآیند خروجی کند. +3. گفتگوی دارای حافظه گفتگوی داخلی (Memory) برای ذخیره و انتقال تاریخچه گفتگوی چند دور است، که می تواند در گره هایی مانند LLM و طبقه بندی کننده سوال فعال شود. گردش کار تنظیمات مربوط به Memory ندارد و نمی تواند آنها را فعال کند. +4. متغیرهای داخلی برای گره شروع گفتگوی شامل: `sys.query`, `sys.files`, `sys.conversation_id`, `sys.user_id`. متغیرهای داخلی برای گره شروع گردش کار شامل: `sys.files`, `sys_id`. + + diff --git a/fa/guides/workflow/node/README.md b/fa/guides/workflow/node/README.md new file mode 100644 index 000000000..61aedccc1 --- /dev/null +++ b/fa/guides/workflow/node/README.md @@ -0,0 +1,9 @@ +# شرح گره + +**گره ها اجزای کلیدی یک گردش کار هستند** و با اتصال گره های با کارایی های مختلف، اجرای یک سری عملیات را ممکن می سازند. + +### گره های اصلی + +
شروعپارامترهای اولیه برای شروع یک فرآیند گردش کار را تعریف می کند.
پایانمحتوای خروجی نهایی برای پایان یک فرآیند گردش کار را تعریف می کند.
پاسخمحتوای پاسخ را در فرآیند چت فلو تعریف می کند.
مدل زبان بزرگ (LLM)برای پاسخ به سؤالات یا پردازش زبان طبیعی، یک مدل زبان بزرگ را فراخوانی می کند.
بازیابی اطلاعاتمحتوای متنی مرتبط با سؤالات کاربر را از یک پایگاه دانش بازیابی می کند که می تواند به عنوان زمینه ای برای گره های LLM پایین دست عمل کند.
طبقه بندی سؤالبا تعریف توضیحات طبقه بندی، LLM می تواند طبقه بندی مطابق با ورودی کاربر را انتخاب کند.
اگر/در غیر اینصورتبه شما امکان می دهد گردش کار را به دو شاخه بر اساس شرایط اگر/در غیر اینصورت تقسیم کنید.
اجرای کدکد پایتون/NodeJS را برای اجرای منطق سفارشی مانند تبدیل داده در گردش کار اجرا می کند.
قالببا استفاده از Jinja2، یک زبان قالب بندی پایتون، امکان تبدیل داده انعطاف پذیر و پردازش متن را فراهم می کند.
جمع کننده متغیرمتغیرها را از چندین شاخه به یک متغیر واحد برای پیکربندی یکپارچه گره های پایین دست جمع می کند.
تعیین کننده متغیرگره تعیین کننده متغیر برای انتساب مقادیر به متغیرهای قابل نوشتن استفاده می شود.
استخراج کننده پارامتراز LLM برای استنباط و استخراج پارامترهای ساختار یافته از زبان طبیعی برای فراخوانی ابزار بعدی یا درخواست های HTTP استفاده می کند.
تکرارچندین مرحله را روی اشیاء لیست تا زمان خروجی تمام نتایج اجرا می کند.
درخواست HTTPارسال درخواست سرور از طریق پروتکل HTTP را امکان پذیر می کند، مناسب برای بازیابی نتایج خارجی، وب هوک ها، تولید تصاویر و سایر سناریوها.
ابزارهاامکان فراخوانی ابزارهای Dify داخلی، ابزارهای سفارشی، زیر گردش کار و موارد دیگر را در گردش کار فراهم می کند.
+ + diff --git a/fa/guides/workflow/node/answer.md b/fa/guides/workflow/node/answer.md new file mode 100644 index 000000000..bf96e9ce5 --- /dev/null +++ b/fa/guides/workflow/node/answer.md @@ -0,0 +1,23 @@ +--- +description: پاسخ +--- + +# پاسخ مستقیم + +تعریف محتوای پاسخ در فرآیند گفتگو. در یک ویرایشگر متن، شما انعطاف‌پذیری برای تعیین فرمت پاسخ را دارید. این شامل ساختن یک بلوک ثابت از متن، استفاده از متغیرهای خروجی از مراحل قبلی به عنوان محتوای پاسخ، یا ادغام متن سفارشی با متغیرها برای پاسخ است. + +گره پاسخ را می توان به طور یکپارچه در هر نقطه ای برای ارائه پویا محتوا به پاسخ های گفتگو ادغام کرد. این تنظیم از یک حالت پیکربندی ویرایش زنده پشتیبانی می کند که اجازه می دهد تا محتوای متن و تصویر با هم مرتب شوند. پیکربندی ها شامل موارد زیر است: + +1. خروجی محتوای پاسخ از یک گره مدل زبان (LLM). +2. خروجی تصاویر تولید شده. +3. خروجی متن ساده. + +مثال 1: خروجی متن ساده. + +
+ +مثال 2: خروجی تصویر و پاسخ LLM. + +
+ +
diff --git a/fa/guides/workflow/node/code.md b/fa/guides/workflow/node/code.md new file mode 100644 index 000000000..7eb5956c3 --- /dev/null +++ b/fa/guides/workflow/node/code.md @@ -0,0 +1,99 @@ +# اجرای کد + +## فهرست محتوا + +* [مقدمه](code.md#introduction) +* [سناریوهای استفاده](code.md#usage-scenarios) +* [استقرار محلی](code.md#local-deployment) +* [سیاست‌های امنیتی](code.md#security-policies) + +## مقدمه + +گره کد از اجرای کد پایتون/NodeJS برای انجام تبدیلات داده در یک گردش کار پشتیبانی می‌کند. می‌تواند گردش کار شما را ساده‌تر کند و برای سناریوهایی مانند عملیات ریاضی، تبدیلات JSON، پردازش متن و موارد دیگر مناسب است. + +این گره انعطاف‌پذیری را برای توسعه‌دهندگان به طور قابل توجهی افزایش می‌دهد و به آنها امکان می‌دهد تا اسکریپت‌های سفارشی پایتون یا جاوا اسکریپت را در گردش کار تعبیه کنند و متغیرها را به روش‌هایی که گره‌های از پیش تنظیم شده نمی‌توانند به دست آورند، دستکاری کنند. از طریق گزینه‌های پیکربندی، می‌توانید متغیرهای ورودی و خروجی مورد نیاز را مشخص کنید و کد اجرایی متناظر را بنویسید: + +
+ +## پیکربندی + +اگر نیاز به استفاده از متغیرهای گره‌های دیگر در گره کد دارید، باید نام متغیرها را در "متغیرهای ورودی" تعریف کنید و به این متغیرها ارجاع دهید. می‌توانید به [رجوع به متغیرها](../key-concept.md#variables) مراجعه کنید. + +## سناریوهای استفاده + +با استفاده از گره کد، می‌توانید عملیات متداول زیر را انجام دهید: + +### پردازش داده‌های ساخت‌یافته + +در گردش کارها، اغلب مجبور به مقابله با پردازش داده‌های بدون ساختار مانند تجزیه، استخراج و تبدیل رشته‌های JSON هستید. یک مثال معمولی پردازش داده‌ها از یک گره HTTP است. در ساختارهای برگشتی API مشترک، ممکن است داده‌ها در چندین لایه از اشیاء JSON تو در تو قرار داشته باشند و شما نیاز دارید که زمینه‌های خاصی را استخراج کنید. گره کد می‌تواند به شما در انجام این عملیات کمک کند. در اینجا یک مثال ساده وجود دارد که زمینه `data.name` را از یک رشته JSON که توسط یک گره HTTP برگردانده شده است، استخراج می‌کند: + +```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 و غیره داشته باشید. گره کد می‌تواند به شما در ادغام این منابع داده با هم کمک کند. در اینجا یک مثال ساده وجود دارد که داده‌ها را از دو پایگاه دانش ادغام می‌کند: + +```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 +def main() -> dict: + return { + "result": open("/etc/passwd").read(), + } +``` + +این قطعه کد مشکلات زیر را دارد: + +* **دسترسی غیرمجاز به فایل:** کد سعی در خواندن فایل "/etc/passwd" دارد که یک فایل سیستم بحرانی در سیستم‌های Unix/Linux است که اطلاعات حساب کاربری را ذخیره می‌کند. +* **افشاگری اطلاعات حساس:** فایل "/etc/passwd" اطلاعات مهمی در مورد کاربران سیستم مانند نام کاربری، شناسه کاربری، شناسه گروه، مسیرهای دایرکتوری خانگی و غیره را شامل می‌شود. دسترسی مستقیم می‌تواند منجر به نشت اطلاعات شود. + +کد خطرناک به طور خودکار توسط Cloudflare WAF مسدود خواهد شد. می‌توانید با بررسی برگه "شبکه" در "ابزارهای توسعه وب" مرورگر خود، بررسی کنید که آیا مسدود شده است یا خیر. + +

Cloudflare WAF

+ + + diff --git a/fa/guides/workflow/node/end.md b/fa/guides/workflow/node/end.md new file mode 100644 index 000000000..9521f4745 --- /dev/null +++ b/fa/guides/workflow/node/end.md @@ -0,0 +1,31 @@ +# پایان + +### 1 تعریف + +محتوای خروجی نهایی یک گردش کار را مشخص کنید. هر گردش کار برای خروجی دادن نتیجه نهایی پس از اجرای کامل، به حداقل یک گره انتهایی نیاز دارد. + +گره انتهایی نقطه خاتمه در فرآیند است؛ پس از آن هیچ گره دیگری قابل اضافه شدن نیست. در یک برنامه گردش کار، نتایج فقط زمانی خروجی داده می‌شوند که گره انتهایی به آن برسد. اگر انشعابات شرطی در فرآیند وجود داشته باشد، باید چندین گره انتهایی تعریف شود. + +گره انتهایی باید یک یا چند متغیر خروجی اعلام کند، که می‌تواند به متغیرهای خروجی هر گره بالادستی ارجاع دهد. + +{% hint style="info" %} +گره‌های انتهایی در چت‌فلو پشتیبانی نمی‌شوند. +{% endhint %} + +*** + +### 2 سناریوها + +در [گردش کار تولید داستان طولانی](iteration.md#example-2-long-article-iterative-generation-another-scheduling-method) زیر، متغیر `Output` که توسط گره انتهایی اعلام شده، خروجی گره کد بالادستی است. این بدان معناست که گردش کار پس از تکمیل اجرای گره کد به پایان می‌رسد و نتیجه اجرای کد را خروجی می‌دهد. + +

گره انتهایی - مثال تولید داستان طولانی

+ +**مثال اجرای مسیر منفرد:** + +
+ +**مثال اجرای چند مسیری:** + +
+ + diff --git a/fa/guides/workflow/node/http-request.md b/fa/guides/workflow/node/http-request.md new file mode 100644 index 000000000..c2ff62004 --- /dev/null +++ b/fa/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. سناریوها + +یکی از ویژگی‌های عملی این گره، امکان درج متغیرها به صورت پویا در بخش‌های مختلف درخواست بر اساس سناریو است. به عنوان مثال، هنگام رسیدگی به درخواست‌های بازخورد مشتری، می‌توانید متغیرهایی مانند نام کاربری یا شناسه مشتری، محتوای بازخورد و غیره را در درخواست جاسازی کنید تا پاسخ‌های خودکار را سفارشی کنید یا اطلاعات خاص مشتری را بازیابی و منابع مربوطه را به یک سرور مشخص ارسال کنید. + +

طبقه بندی بازخورد مشتری

+ +مقادیر برگشتی یک درخواست HTTP شامل بدنه پاسخ، کد وضعیت، هدرهای پاسخ و فایل‌ها است. قابل توجه است که اگر پاسخ شامل یک فایل (در حال حاضر فقط انواع تصاویر پشتیبانی می‌شوند) باشد، این گره می‌تواند به طور خودکار فایل را برای استفاده در مراحل بعدی گردش کار ذخیره کند. این طراحی نه تنها کارایی پردازش را بهبود می‌بخشد، بلکه رسیدگی به پاسخ‌های دارای فایل را ساده و مستقیم می‌کند. diff --git a/fa/guides/workflow/node/ifelse.md b/fa/guides/workflow/node/ifelse.md new file mode 100644 index 000000000..9a395ab78 --- /dev/null +++ b/fa/guides/workflow/node/ifelse.md @@ -0,0 +1,46 @@ +# شرطی شاخه IF/ELSE + +### تعریف + +به شما امکان می‌دهد تا فرآیند کار را بر اساس شرایط if/else به دو شاخه تقسیم کنید. + +یک گره شاخه شرطی سه قسمت دارد: + +* شرط IF: یک متغیر را انتخاب کنید، شرط را تنظیم کنید و مقدار رضایت‌بخش شرط را مشخص کنید. +* اگر شرط IF برابر با `True` باشد، مسیر IF را اجرا کنید. +* اگر شرط IF برابر با `False` باشد، مسیر ELSE را اجرا کنید. +* اگر شرط ELIF برابر با `True` باشد، مسیر ELIF را اجرا کنید; +* اگر شرط ELIF برابر با `False` باشد، به ارزیابی مسیر بعدی ELIF ادامه دهید یا مسیر نهایی ELSE را اجرا کنید. + +**انواع شرط** + +* شامل است +* شامل نیست +* با آن شروع می‌شود +* با آن پایان می‌یابد +* هست +* نیست +* خالی است +* خالی نیست + +*** + +### سناریو + +
+ +با استفاده از **فرآیند کار خلاصه متن** بالا به عنوان مثال: + +* شرط IF: متغیر `summarystyle` را از گره شروع انتخاب کنید، با شرط **شامل است** `technical`. +* اگر شرط IF برابر با `True` باشد، مسیر IF را با پرس‌و‌جو از دانش مرتبط با فناوری از طریق گره بازیابی دانش دنبال کنید، سپس از طریق گره LLM پاسخ دهید (همانطور که در نیمه بالایی نمودار نشان داده شده است); +* اگر شرط IF برابر با `False` باشد، اما شرط `ELIF` اضافه شده است، جایی که ورودی برای متغیر `summarystyle` **شامل** `technology` نیست، با این حال شرط `ELIF` شامل `science` است، بررسی کنید که آیا شرط در `ELIF` `True` است، سپس مراحل تعریف شده در آن مسیر را اجرا کنید; +* اگر شرط در `ELIF` `False` باشد، به این معنی که متغیر ورودی نه `technology` و نه `science` را شامل می‌شود، به ارزیابی شرط بعدی `ELIF` ادامه دهید یا مسیر نهایی `ELSE` را اجرا کنید; +* اگر شرط IF برابر با `False` باشد، یعنی ورودی متغیر `summarystyle` **شامل** `technical` نیست، مسیر ELSE را اجرا کنید، با استفاده از گره LLM2 پاسخ دهید (قسمت پایین نمودار). + +**قضاوت‌های شرط چندگانه** + +برای قضاوت‌های شرط پیچیده، می‌توانید قضاوت‌های شرط چندگانه را تنظیم کنید و **AND** یا **OR** را بین شرایط برای گرفتن **تقاطع** یا **اتحاد** شرایط، به ترتیب، پیکربندی کنید. + +

قضاوت‌های شرط چندگانه

+ + diff --git a/fa/guides/workflow/node/iteration.md b/fa/guides/workflow/node/iteration.md new file mode 100644 index 000000000..69098e42b --- /dev/null +++ b/fa/guides/workflow/node/iteration.md @@ -0,0 +1,163 @@ +# تکرار + +### تعریف + +اجرای چندین مرحله روی یک آرایه تا زمانی که همه نتایج خروجی شوند. + +مرحله تکرار، مراحل یکسانی را روی هر آیتم در یک لیست انجام می دهد. برای استفاده از تکرار، مطمئن شوید که مقدار ورودی به عنوان یک شی لیست قالب بندی شده است. گره تکرار به گردش کارهای هوش مصنوعی اجازه می دهد تا منطق پردازش پیچیده تری را اداره کنند. این یک نسخه کاربرپسند از گره حلقه است که با انجام برخی سازش ها در سفارشی سازی، به کاربران غیرفنی اجازه می دهد تا به سرعت کار را شروع کنند. + +*** + +### سناریوها + +#### **مثال 1: تولید کننده تکرار مقاله طولانی** + +

تولید کننده داستان بلند

+ +1. عنوان و طرح کلی داستان را در **گره شروع** وارد کنید. +2. از یک **گره تولید زیرعنوان ها و طرح کلی ها** برای استفاده از LLM برای تولید محتوای کامل از ورودی کاربر استفاده کنید. +3. از یک **گره استخراج زیرعنوان ها و طرح کلی ها** برای تبدیل محتوای کامل به یک فرمت آرایه استفاده کنید. +4. از یک **گره تکرار** برای احاطه کردن یک **گره LLM** و تولید محتوا برای هر فصل از طریق چندین تکرار استفاده کنید. +5. یک **گره پاسخ مستقیم** را در داخل گره تکرار اضافه کنید تا خروجی جریان پس از هر تکرار حاصل شود. + +**مراحل پیکربندی دقیق** + +1. عنوان داستان (عنوان) و طرح کلی (طرح کلی) را در **گره شروع** پیکربندی کنید. + +

پیکربندی گره شروع

+ +2. از یک **گره تولید زیرعنوان ها و طرح کلی ها** برای تبدیل عنوان و طرح کلی داستان به متن کامل استفاده کنید. + +

گره الگو

+ +3. از یک **گره استخراج زیرعنوان ها و طرح کلی ها** برای تبدیل متن داستان به یک ساختار آرایه (Array) استفاده کنید. پارامتر برای استخراج `sections` است و نوع پارامتر `Array[Object]` است. + +

استخراج پارامتر

+ +{% hint style="info" %} +کارایی استخراج پارامتر تحت تأثیر توانایی استنباط مدل و دستورالعمل های داده شده است. استفاده از یک مدل با توانایی های استنباط قوی تر و اضافه کردن مثال ها در **دستورالعمل ها** می تواند نتایج استخراج پارامتر را بهبود بخشد. +{% endhint %} + +4. از طرح کلی داستان با فرمت آرایه به عنوان ورودی برای گره تکرار استفاده کنید و آن را در داخل گره تکرار با استفاده از یک **گره LLM** پردازش کنید. + +

پیکربندی گره تکرار

+ +متغیرهای ورودی `GenerateOverallOutline/output` و `Iteration/item` را در گره LLM پیکربندی کنید. + +

پیکربندی گره LLM

+ +{% hint style="info" %} +متغیرهای داخلی برای تکرار: `items[object]` و `index[number]`. + +`items[object]` نشان دهنده آیتم ورودی برای هر تکرار است. + +`index[number]` نشان دهنده دور تکرار فعلی است. +{% endhint %} + +1. یک **گره پاسخ مستقیم** را در داخل گره تکرار پیکربندی کنید تا خروجی جریان پس از هر تکرار حاصل شود. + +

پیکربندی گره پاسخ

+ +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** + +

استخراج پارامتر

+ +**بازگشت با استفاده از گره استخراج پارامتر** + +

استخراج پارامتر

+ +### نحوه تبدیل یک آرایه به متن + +متغیر خروجی گره تکرار در فرمت آرایه است و نمی توان مستقیماً آن را خروجی داد. می توانید از یک مرحله ساده برای تبدیل آرایه به متن استفاده کنید. + +**تبدیل با استفاده از یک گره کد** + +

تبدیل گره کد

+ +مثال کد: + +```python +def main(articleSections: list): + data = articleSections + return { + "result": "/n".join(data) + } +``` + +**تبدیل با استفاده از یک گره الگو** + +

تبدیل گره الگو

+ +مثال کد: + +```django +{{ articleSections | join("/n") }} +``` + + diff --git a/fa/guides/workflow/node/knowledge-retrieval.md b/fa/guides/workflow/node/knowledge-retrieval.md new file mode 100644 index 000000000..98dd88979 --- /dev/null +++ b/fa/guides/workflow/node/knowledge-retrieval.md @@ -0,0 +1,29 @@ +# بازیابی دانش + +گره بازیابی پایگاه دانش برای استخراج محتوای متنی مرتبط با سوالات کاربر از پایگاه دانش Dify طراحی شده است که می تواند به عنوان زمینه برای پاسخ‌های بعدی توسط مدل زبان بزرگ (LLM) مورد استفاده قرار گیرد. + +
+ +تنظیم گره بازیابی پایگاه دانش شامل سه مرحله اصلی است: + +1. **انتخاب متغیر پرس و جو** +2. **انتخاب پایگاه دانش برای پرس و جو** +3. **تنظیم استراتژی بازیابی** + +**انتخاب متغیر پرس و جو** + +در سناریوهای بازیابی پایگاه دانش، متغیر پرس و جو به طور معمول نشان دهنده سوال ورودی کاربر است. در گره "شروع" برنامه‌های کاربردی مکالمه، سیستم "sys.query" را به عنوان متغیر ورودی کاربر از پیش تنظیم می‌کند. از این متغیر می‌توان برای پرس و جو از پایگاه دانش برای یافتن قطعات متنی مرتبط با سوال کاربر استفاده کرد. حداکثر محتوای پرس و جو ارسال شده به پایگاه دانش 200 کاراکتر است. + +**انتخاب پایگاه دانش برای پرس و جو** + +در گره بازیابی پایگاه دانش، می‌توانید یک پایگاه دانش موجود از Dify را اضافه کنید. برای دریافت راهنمایی در مورد ایجاد پایگاه دانش در Dify، لطفاً به [مستندات راهنما](https://docs.dify.ai/guides/knowledge-base/create-knowledge-and-upload-documents) پایگاه دانش مراجعه کنید. + +**تنظیم استراتژی بازیابی** + +امکان تغییر استراتژی نمایه سازی و حالت بازیابی برای یک پایگاه دانش منفرد در گره وجود دارد. برای توضیحات مفصل در مورد این تنظیمات، لطفاً به [مستندات راهنما](https://docs.dify.ai/guides/knowledge-base/retrieval-test-and-citation) پایگاه دانش مراجعه کنید. + +
+ +Dify دو استراتژی یادآوری برای سناریوهای مختلف بازیابی پایگاه دانش ارائه می‌دهد: "یادآوری N به 1" و "یادآوری چند طرفه". در حالت N به 1، پرس و جوهای پایگاه دانش از طریق فراخوانی تابع انجام می‌شوند و نیاز به انتخاب یک مدل استدلال سیستم دارد. در حالت یادآوری چند طرفه، نیاز به پیکربندی یک مدل Rerank برای رتبه بندی مجدد نتایج وجود دارد. برای توضیحات مفصل در مورد این دو استراتژی یادآوری، لطفاً به توضیحات حالت بازیابی در [مستندات راهنما](https://docs.dify.ai/guides/knowledge-base/create-knowledge-and-upload-documents#id-5-indexing-methods) مراجعه کنید. + +
diff --git a/fa/guides/workflow/node/llm.md b/fa/guides/workflow/node/llm.md new file mode 100644 index 000000000..5d1d62576 --- /dev/null +++ b/fa/guides/workflow/node/llm.md @@ -0,0 +1,98 @@ +# LLM + +### تعریف + +برای پاسخ به سوالات یا پردازش زبان طبیعی، مدل های زبان بزرگ را فراخوانی می کند. + +

گره LLM

+ +*** + +### سناریو ها + +LLM هسته اصلی Chatflow/Workflow است که از قابلیت های مکالمه ای/تولیدی/طبقه بندی/پردازش مدل های زبان بزرگ برای رسیدگی به طیف گسترده ای از وظایف بر اساس درخواست های داده شده استفاده می کند و می تواند در مراحل مختلف گردش کار استفاده شود. + +* **شناسایی نیت**: در سناریو های خدمات مشتری، شناسایی و طبقه بندی استعلامات کاربران برای هدایت فرآیندهای پایین دست. +* **تولید متن**: در سناریو های ایجاد محتوا، تولید متن مرتبط بر اساس موضوعات و کلمات کلیدی. +* **طبقه بندی محتوا**: در سناریو های پردازش دسته ای ایمیل، طبقه بندی خودکار ایمیل ها، مانند سوالات/شکایات/اسپم. +* **تبدیل متن**: در سناریو های ترجمه، ترجمه متن ارائه شده توسط کاربر به زبان مشخص شده. +* **تولید کد**: در سناریو های کمک برنامه نویسی، تولید کد تجاری خاص یا نوشتن موارد تست بر اساس نیازهای کاربر. +* **RAG**: در سناریو های پاسخگویی به سوالات پایگاه دانش، سازماندهی مجدد دانش مرتبط بازیابی شده برای پاسخ به سوالات کاربران. +* **درک تصویر**: استفاده از مدل های چندوجهی با قابلیت های دیداری برای درک و پاسخ به سوالات در مورد اطلاعات موجود در تصاویر. + +با انتخاب مدل مناسب و نوشتن درخواست ها، می توانید راه حل های قدرتمند و قابل اعتماد را در Chatflow/Workflow ایجاد کنید. + +*** + +### نحوه پیکربندی + +

پیکربندی گره LLM - انتخاب مدل

+ +**مراحل پیکربندی:** + +1. **انتخاب مدل**: Dify از مدل های اصلی جهانی، از جمله سری GPT OpenAI، سری Claude Anthropic و سری Gemini Google پشتیبانی می کند. انتخاب یک مدل به توانایی استنباط، هزینه، سرعت پاسخ، پنجره متن و غیره بستگی دارد. شما باید بر اساس نیازهای سناریو و نوع کار، یک مدل مناسب را انتخاب کنید. +2. **پیکربندی پارامتر های مدل**: پارامتر های مدل، نتایج تولید را کنترل می کنند، مانند درجه حرارت، TopP، حداکثر توکن، قالب پاسخ و غیره. برای تسهیل انتخاب، سیستم سه مجموعه پارامتر از پیش تعیین شده ارائه می دهد: خلاقانه، متعادل و دقیق. +3. **نوشتن درخواست ها**: گره LLM یک صفحه ترکیب درخواست آسان برای استفاده ارائه می دهد. انتخاب یک مدل چت یا مدل تکمیل، ساختارهای مختلف ترکیب درخواست را نشان می دهد. +4. **تنظیمات پیشرفته**: می توانید حافظه را فعال کنید، پنجره های حافظه را تنظیم کنید و از زبان قالب Jinja-2 برای درخواست های پیچیده تر استفاده کنید. + +{% hint style="info" %} +اگر برای اولین بار از Dify استفاده می کنید، باید قبل از انتخاب یک مدل در گره LLM، [پیکربندی مدل](../../model-configuration/) را در **تنظیمات سیستم—ارائه دهندگان مدل** تکمیل کنید. +{% endhint %} + +#### **نوشتن درخواست ها** + +در گره LLM، می توانید درخواست های ورودی مدل را سفارشی کنید. اگر یک مدل چت را انتخاب می کنید، می توانید بخش های SYSTEM/User/ASSISTANT را سفارشی کنید. + +**مولد درخواست** + +اگر در ارائه درخواست های موثر سیستم (SYSTEM) با مشکل مواجه هستید، می توانید از مولد درخواست برای ایجاد سریع درخواست هایی که برای سناریو های خاص شما مناسب هستند، استفاده کنید و از قابلیت های هوش مصنوعی بهره مند شوید. + +
+ +در ویرایشگر درخواست، می توانید با تایپ **"/"** یا **"{"** ، **منوی درج متغیر** را برای درج **بلوک های متغیر ویژه** یا **متغیر های گره بالادستی** به عنوان محتوای زمینه در درخواست فراخوانی کنید. + +

فراخوانی منوی درج متغیر

+ +*** + +### توضیح متغیر های ویژه + +**متغیر های زمینه** + +متغیر های زمینه، نوع خاصی از متغیر هستند که در داخل گره 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 متغیر تاریخچه مکالمه را در [حالت تخصصی Prompt (منسوخ)](../../../learn-more/extended-reading/prompt-engineering/prompt-engineering-1/) طراحی کرد. این متغیر به گره LLM در Chatflow منتقل می شود و برای درج تاریخچه چت بین هوش مصنوعی و کاربر در درخواست استفاده می شود و به LLM کمک می کند تا زمینه مکالمه را درک کند. + +{% hint style="info" %} +متغیر تاریخچه مکالمه به طور گسترده ای استفاده نمی شود و فقط هنگام انتخاب مدل های تکمیل متن در Chatflow قابل درج است. +{% endhint %} + +

درج متغیر تاریخچه مکالمه

+ +*** + +### ویژگی های پیشرفته + +**حافظه**: هنگام فعال شدن، هر ورودی به طبقه بندی نیت، شامل تاریخچه چت از مکالمه خواهد بود تا به LLM در درک زمینه و بهبود درک سوال در دیالوگ های تعاملی کمک کند. + +**پنجره حافظه**: هنگام بسته شدن پنجره حافظه، سیستم به طور پویا مقدار تاریخچه چت منتقل شده را بر اساس پنجره متن مدل فیلتر می کند. هنگام باز بودن، کاربران می توانند مقدار دقیق تاریخچه چت منتقل شده (به لحاظ تعداد) را کنترل کنند. + +**تنظیمات نام نقش مکالمه**: به دلیل تفاوت در مراحل آموزش مدل، مدل های مختلف به طور متفاوتی به دستورالعمل های نام نقش عمل می کنند، مانند Human/Assistant، Human/AI، Human/Assistant و غیره. برای سازگاری با اثرات پاسخ درخواست چندین مدل، سیستم تنظیمات نام نقش مکالمه را ارائه می دهد. تغییر نام نقش، پیشوند نقش را در تاریخچه مکالمه تغییر می دهد. + +**قالب های Jinja-2**: ویرایشگر درخواست LLM از زبان قالب Jinja-2 پشتیبانی می کند و به شما امکان می دهد از این زبان قالب قدرتمند Python برای تبدیل داده های سبک وزن و پردازش منطقی استفاده کنید. به [مستندات رسمی](https://jinja.palletsprojects.com/en/3.1.x/templates/) مراجعه کنید. + +مثال سناریو: **🚧** + + diff --git a/fa/guides/workflow/node/parameter-extractor.md b/fa/guides/workflow/node/parameter-extractor.md new file mode 100644 index 000000000..1b04662cd --- /dev/null +++ b/fa/guides/workflow/node/parameter-extractor.md @@ -0,0 +1,60 @@ +# استخراج پارامتر + +### 1 تعریف + +از LLM برای استنباط و استخراج پارامترهای ساختاریافته از زبان طبیعی برای فراخوانی ابزار بعدی یا درخواست های HTTP استفاده کنید. + +ورک فلوهای Dify انتخاب غنی از [ابزارها](../../tools.md) را ارائه می‌دهند، که اکثر آن‌ها به پارامترهای ساختاریافته به عنوان ورودی نیاز دارند. استخراج کننده پارامتر می‌تواند زبان طبیعی کاربر را به پارامترهایی تبدیل کند که توسط این ابزارها قابل شناسایی هستند، و فراخوانی ابزار را تسهیل می‌کند. + +برخی از گره‌ها در ورک فلو به فرمت‌های داده‌ای خاص به عنوان ورودی نیاز دارند، مانند گره [تکرار](iteration.md#definition)، که به فرمت آرایه‌ای نیاز دارد. استخراج کننده پارامتر می‌تواند به طور راحت [تبدیل پارامتر ساختاریافته](iteration.md#example-1-long-article-iteration-generator) را انجام دهد. + +*** + +### 2 سناریوهای + +1. **استخراج پارامترهای کلیدی مورد نیاز توسط ابزارها از زبان طبیعی**، مانند ساخت یک برنامه ساده ی گفتگو برای بازیابی مقالات Arxiv. + +در این مثال: ابزار بازیابی مقاله Arxiv به **نویسنده مقاله** یا **شناسه مقاله** به عنوان پارامتر ورودی نیاز دارد. استخراج کننده پارامتر، شناسه مقاله **2405.10739** را از عبارت "محتوای این مقاله چیست: 2405.10739" استخراج می‌کند و از آن به عنوان پارامتر ابزار برای پرس و جو دقیق استفاده می‌کند. + +

ابزار بازیابی مقاله Arxiv

+ +2. **تبدیل متن به داده‌های ساختاریافته**، مانند برنامه ی تولید تکرار داستان بلند، که در آن به عنوان گام قبل از گره [تکرار](iteration.md) عمل می‌کند، و محتوای فصل را در فرمت متنی به فرمت آرایه‌ای تبدیل می‌کند، تا پردازش تولید چند دوره‌ای توسط گره تکرار تسهیل شود. + +
+ +1. **استخراج داده‌های ساختاریافته و استفاده از [درخواست HTTP](https://docs.dify.ai/guides/workflow/node/http-request)**، که می‌تواند هر URL قابل دسترسی را درخواست کند، مناسب برای به دست آوردن نتایج بازیابی خارجی، وب هوک‌ها، تولید تصاویر و سایر سناریوها. + +*** + +### 3 نحوه پیکربندی + +**مراحل پیکربندی** + +1. متغیر ورودی را انتخاب کنید، که معمولاً متغیر ورودی برای استخراج پارامتر است. +2. مدل را انتخاب کنید، زیرا استخراج کننده پارامتر به توانایی استنباط و تولید ساختاریافته LLM متکی است. +3. پارامترهایی را که باید استخراج شوند تعریف کنید، که می‌توانند به صورت دستی اضافه شوند یا به سرعت از ابزارهای موجود **وارد شوند**. +4. دستورالعمل‌ها را بنویسید، که ارائه مثال‌ها می‌تواند به LLM در بهبود کارایی و پایداری استخراج پارامترهای پیچیده کمک کند. + +**تنظیمات پیشرفته** + +**حالت استنباط** + +برخی از مدل‌ها از دو حالت استنباط پشتیبانی می‌کنند، که استخراج پارامتر را از طریق تماس‌های تابع/ابزار یا روش‌های صرفاً اعلان انجام می‌دهند، با تفاوت‌هایی در انطباق دستورالعمل. برای مثال، برخی از مدل‌ها ممکن است در استنباط اعلان عملکرد بهتری داشته باشند اگر تماس تابع کمتر موثر باشد. + +* تماس تابع/تماس ابزار +* اعلان + +**حافظه** + +هنگامی که حافظه فعال است، هر ورودی به طبقه بندی کننده سوال، تاریخچه ی چت در مکالمه را شامل می‌شود تا به LLM در درک زمینه و بهبود فهم سوال در طول گفتگوهای تعاملی کمک کند. + +**متغیرهای خروجی** + +* متغیرهای تعریف شده ی استخراج شده +* متغیرهای داخلی گره + +`__is_success Number` وضعیت موفقیت آمیز استخراج، با مقدار 1 برای موفقیت و 0 برای شکست. + +`__reason String` دلیل خطای استخراج + + diff --git a/fa/guides/workflow/node/question-classifier.md b/fa/guides/workflow/node/question-classifier.md new file mode 100644 index 000000000..87ba671fe --- /dev/null +++ b/fa/guides/workflow/node/question-classifier.md @@ -0,0 +1,58 @@ +# طبقه‌بندی سوال + +### 1. تعریف + +طبقه‌بندی‌کننده سوال با تعریف توصیف‌های طبقه‌بندی، می‌تواند ورودی‌های کاربر را به دسته‌های مربوطه تخصیص دهد و نتایج طبقه‌بندی را نمایش دهد. + +*** + +### 2. سناریو‌ها + +موارد استفاده معمول شامل **طبقه‌بندی قصد مکالمه خدمات مشتری، طبقه‌بندی نظرات محصولات و طبقه‌بندی ایمیل‌های انبوه** است. + +در یک سناریوی معمولی سؤال و پاسخ خدمات مشتری محصول، طبقه‌بندی‌کننده سوال می‌تواند به عنوان مرحله‌ای اولیه قبل از بازیابی پایگاه دانش عمل کند. این طبقه‌بندی، ورودی سوال کاربر را طبقه‌بندی می‌کند و آن را به پرس‌وجوهای مختلف پایگاه دانش هدایت می‌کند تا به طور دقیق به سوال کاربر پاسخ دهد. + +نمودار زیر یک الگوی گردش کار نمونه برای یک سناریوی خدمات مشتری محصول است: + +
+ +در این سناریو، سه برچسب/توصیف طبقه‌بندی راه‌اندازی می‌کنیم: + +* دسته 1: **سوالات مربوط به خدمات پس از فروش** +* دسته 2: **سوالات مربوط به استفاده از محصول** +* دسته 3: **سوالات دیگر** + +هنگامی که کاربران سوالات مختلف را وارد می‌کنند، طبقه‌بندی‌کننده سوال به طور خودکار آنها را بر اساس برچسب‌های/توصیف‌های طبقه‌بندی تنظیم شده، طبقه‌بندی می‌کند: + +* "**چگونه می‌توانم مخاطبین را روی آیفون ۱۴ تنظیم کنم؟**" —> "**سوالات مربوط به استفاده از محصول**" +* "**مدت زمان گارانتی چقدر است؟**" —> "**سوالات مربوط به خدمات پس از فروش**" +* "**وضعیت هوا امروز چگونه است؟**" —> "**سوالات دیگر**" + +*** + +### 3. نحوه پیکربندی + +
+ +**مراحل پیکربندی:** + +1. **انتخاب متغیر ورودی**: به محتوائی که باید طبقه‌بندی شود اشاره دارد، معمولاً سوال کاربر در یک سناریوی سؤال و پاسخ خدمات مشتری، مانند `sys.query`. +2. **انتخاب مدل استنتاج**: طبقه‌بندی‌کننده سوال از توانایی‌های طبقه‌بندی و استنتاج زبان طبیعی مدل‌های زبان بزرگ استفاده می‌کند. انتخاب یک مدل مناسب می‌تواند اثربخشی طبقه‌بندی را افزایش دهد. +3. **نوشتن برچسب‌ها/توصیف‌های طبقه‌بندی**: می‌توانید با نوشتن کلمات کلیدی یا عبارات توصیفی برای هر دسته، چندین طبقه‌بندی را به صورت دستی اضافه کنید و به مدل زبان بزرگ کمک کنید تا معیارهای طبقه‌بندی را بهتر درک کند. +4. **انتخاب گره‌های پایین دست مربوطه**: پس از طبقه‌بندی، گره طبقه‌بندی سوال می‌تواند جریان را به مسیرهای مختلف هدایت کند، بر اساس رابطه بین طبقه‌بندی و گره‌های پایین دست. + +#### تنظیمات پیشرفته: + +**دستورالعمل‌ها**: در **تنظیمات پیشرفته - دستورالعمل‌ها**، می‌توانید دستورالعمل‌های تکمیلی مانند معیارهای طبقه‌بندی دقیق‌تر را برای افزایش قابلیت‌های طبقه‌بندی‌کننده اضافه کنید. + +**حافظه**: هنگامی که فعال است، هر ورودی به طبقه‌بندی‌کننده سوال شامل تاریخچه گفتگو از مکالمه خواهد بود تا به LLM در درک زمینه و بهبود درک سوال در گفتگوهای تعاملی کمک کند. + +**پنجره حافظه**: هنگامی که پنجره حافظه بسته است، سیستم به طور پویا مقدار تاریخچه گفتگو را بر اساس پنجره زمینه مدل فیلتر می‌کند؛ هنگامی که باز است، کاربران می‌توانند به طور دقیق مقدار تاریخچه گفتگو (به لحاظ عدد) را کنترل کنند. + +**متغیر خروجی**: + +`class_name` + +این نام طبقه‌بندی است که پس از طبقه‌بندی خروجی می‌شود. می‌توانید از متغیر نتیجه طبقه‌بندی در گره‌های پایین دست به دلخواه استفاده کنید. + + diff --git a/fa/guides/workflow/node/start.md b/fa/guides/workflow/node/start.md new file mode 100644 index 000000000..6aed8951e --- /dev/null +++ b/fa/guides/workflow/node/start.md @@ -0,0 +1,33 @@ +# شروع + +### تعریف + +پارامترهای اولیه برای شروع یک گردش کار را تعریف کنید. + +می‌توانید متغیرهای ورودی برای شروع گردش کار را در گره شروع سفارشی کنید. هر گردش کاری به یک گره شروع نیاز دارد. + +

گره شروع گردش کار

+ +گره شروع از تعریف متغیرهای ورودی از چهار نوع پشتیبانی می‌کند: + +* متن +* پاراگراف +* گزینه‌های کشویی +* عدد +* فایل (به زودی) + +

تنظیم متغیرهای گره شروع

+ +پس از پیکربندی، گردش کار در حین اجرا از شما درخواست می‌کند که مقادیر متغیرهای تعریف شده در گره شروع را وارد کنید. + +
+ +{% hint style="info" %} +نکته: در چت فلو، گره شروع متغیرهای سیستمی داخلی را ارائه می‌دهد: `sys.query` و `sys.files`. + +`sys.query` برای سوالات ورودی کاربر در برنامه‌های مکالمه ای استفاده می‌شود. + +`sys.files` برای آپلود فایل در مکالمات، مانند آپلود تصویر، که باید همراه با یک مدل درک تصویر استفاده شود، استفاده می‌شود. +{% endhint %} + + diff --git a/fa/guides/workflow/node/template.md b/fa/guides/workflow/node/template.md new file mode 100644 index 000000000..e8e33a7a2 --- /dev/null +++ b/fa/guides/workflow/node/template.md @@ -0,0 +1,29 @@ +# الگو + +الگو به شما امکان می‌دهد تا به‌طور پویا متغیرها از گره‌های قبلی را با استفاده از Jinja2، یک نحو قدرتمند قالب‌بندی برای پایتون، به یک خروجی متنی واحد فرمت کنید و ترکیب کنید. این گره برای ترکیب داده‌ها از منابع مختلف به ساختار خاصی که برای گره‌های بعدی لازم است، مفید است. مثال ساده‌ی زیر نشان می‌دهد که چگونه می‌توان یک مقاله را با کنار هم قرار دادن خروجی‌های قبلی مونتاژ کرد: + +
+ +علاوه بر موارد استفاده‌ی ساده، می‌توانید طبق [مستندات](https://jinja.palletsprojects.com/en/3.1.x/templates/) Jinja، الگوهای پیچیده‌تری برای انواع کارها ایجاد کنید. در اینجا یک الگو وجود دارد که قطعات بازیابی شده و فراداده‌های مرتبط آنها را از یک گره‌ی بازیابی دانش به یک فرمت مارک‌داون ساختاریافته تبدیل می‌کند: + +```Plain +{% raw %} +{% for item in chunks %} +### بخش {{ loop.index }}. +### شباهت: {{ item.metadata.score | default('N/A') }} + +#### {{ item.title }} + +##### محتوا +{{ item.content | replace('\n', '\n\n') }} + +--- +{% endfor %} +{% endraw %} +``` + +
+ +این گره‌ی الگو را می‌توان در یک Chatflow استفاده کرد تا خروجی‌های میانی را قبل از راه‌اندازی پاسخ LLM به کاربر نهایی برگرداند. + +> گره‌ی "پاسخ" در یک Chatflow انتهایی نیست. می‌توان آن را در هر جایی قرار داد تا در چندین نقطه از جریان، پاسخ‌ها را خروجی دهد. diff --git a/fa/guides/workflow/node/tools.md b/fa/guides/workflow/node/tools.md new file mode 100644 index 000000000..1a755cfe8 --- /dev/null +++ b/fa/guides/workflow/node/tools.md @@ -0,0 +1,26 @@ +# ابزارها + +### تعریف + +این گردش کار، انتخاب غنی از ابزارها را در سه دسته ارائه می‌دهد: + +* **ابزارهای داخلی**: ابزارهای ارائه شده توسط Dify. +* **ابزارهای سفارشی**: ابزارهای وارد شده یا پیکربندی شده از طریق فرمت استاندارد OpenAPI/Swagger. +* **گردش کارها**: گردش کارهایی که به عنوان ابزار منتشر شده‌اند. + +قبل از استفاده از ابزارهای داخلی، ممکن است نیاز به **مجوزدهی** آنها داشته باشید. + +اگر ابزارهای داخلی نیازهای شما را برآورده نمی‌کنند، می‌توانید ابزارهای سفارشی را در بخش **منوی پیمایش Dify -- ابزارها** ایجاد کنید. + +همچنین می‌توانید یک گردش کار پیچیده‌تر را تنظیم و آن را به عنوان یک ابزار منتشر کنید. + +

انتخاب ابزار

+ +

پیکربندی ابزار جستجوی گوگل برای بازیابی دانش خارجی

+ +پیکربندی یک گره ابزار معمولاً شامل دو مرحله است: + +1. مجوزدهی به ابزار/ایجاد ابزار سفارشی/انتشار یک گردش کار به عنوان ابزار. +2. پیکربندی ورودی و پارامترهای ابزار. + +برای اطلاعات بیشتر در مورد چگونگی ایجاد ابزارهای سفارشی و پیکربندی آنها، لطفا به [راهنمای پیکربندی ابزار](https://docs.dify.ai/guides/tools) مراجعه کنید. diff --git a/fa/guides/workflow/node/variable-assigner.md b/fa/guides/workflow/node/variable-assigner.md new file mode 100644 index 000000000..4a5c07700 --- /dev/null +++ b/fa/guides/workflow/node/variable-assigner.md @@ -0,0 +1,37 @@ +# جمع‌کننده متغیرها + +### ۱ تعریف + +جمع‌کننده متغیرها (که قبلا گره انتساب متغیر نامیده می شد) یک گره کلیدی در گردش کار است. این گره مسئول ادغام نتایج خروجی از شاخه‌های مختلف است و تضمین می‌کند که صرف‌نظر از اینکه کدام شاخه اجرا می‌شود، نتایج آن را می‌توان از طریق یک متغیر واحد مرجع و دسترسی داشت. این امر به ویژه در سناریوهای چندشاخه‌ای مفید است، زیرا متغیرهایی با عملکرد مشابه را از شاخه‌های مختلف به یک متغیر خروجی واحد نگاشت می‌کند و از نیاز به تعاریف تکراری در گره‌های پایین‌دست جلوگیری می‌کند. + +*** + +### ۲ سناریوها + +از طریق جمع‌کننده متغیرها می‌توانید خروجی‌های مختلف، مانند طبقه‌بندی موضوع یا انشعاب شرطی، را به یک خروجی واحد برای استفاده و دستکاری توسط گره‌های پایین‌دست جمع‌آوری کنید، و این امر مدیریت جریان داده را ساده می‌کند. + +**جمع‌کننده چند شاخه‌ای پس از طبقه‌بندی موضوع** + +بدون جمع‌کننده متغیرها، شاخه‌های طبقه‌بندی ۱ و طبقه‌بندی ۲، پس از بازیابی‌های پایگاه دانش مختلف، به تعاریف تکراری برای گره‌های LLM و پاسخ مستقیم پایین‌دست نیاز خواهند داشت. + +

طبقه‌بندی موضوع (بدون جمع‌کننده متغیرها)

+ +با اضافه کردن جمع‌کننده متغیرها، خروجی‌های دو گره بازیابی دانش می‌توانند در یک متغیر واحد جمع‌آوری شوند. + +

جمع‌کننده چند شاخه‌ای پس از طبقه‌بندی موضوع

+ +**جمع‌کننده چند شاخه‌ای پس از انشعاب شرطی IF/ELSE** + +

جمع‌کننده چند شاخه‌ای پس از انشعاب شرطی

+ +### ۳ الزامات فرمت + +جمع‌کننده متغیرها از جمع‌آوری انواع داده‌های مختلف، از جمله رشته‌ها (`String`)، اعداد (`Number`)، اشیاء (`Object`) و آرایه‌ها (`Array`) پشتیبانی می‌کند. + +**جمع‌کننده متغیرها فقط می‌تواند متغیرهایی با نوع داده یکسان را جمع‌آوری کند.** اگر اولین متغیر اضافه شده به گره جمع‌کننده متغیرها از نوع داده `String` باشد، اتصالات بعدی به طور خودکار فیلتر می‌شوند و فقط به متغیرهای نوع `String` اجازه اضافه شدن را می‌دهند. + +**گروه بندی جمع‌آوری** + +از نسخه v0.6.10 به بعد، گروه بندی جمع‌آوری پشتیبانی می‌شود. + +هنگامی که گروه بندی جمع‌آوری فعال است، جمع‌کننده متغیرها می‌تواند گروه‌های متعددی از متغیرها را جمع‌آوری کند، که هر گروه برای جمع‌آوری نیاز به نوع داده یکسان دارد. diff --git a/fa/guides/workflow/node/variable-assignment.md b/fa/guides/workflow/node/variable-assignment.md new file mode 100644 index 000000000..f81eb0762 --- /dev/null +++ b/fa/guides/workflow/node/variable-assignment.md @@ -0,0 +1,160 @@ +# متغیر اختصاص دهنده + +### تعریف + +گره اختصاص دهنده متغیر برای اختصاص دادن مقادیر به متغیرهای قابل نوشتن استفاده می شود. در حال حاضر متغیرهای قابل نوشتن پشتیبانی شده شامل موارد زیر هستند: + +* [متغیرهای مکالمه](https://docs.dify.ai/guides/workflow/key-concepts#conversation-variables). + +نحوه استفاده: از طریق گره اختصاص دهنده متغیر، می توانید متغیرهای گردش کار را برای ذخیره سازی موقت به متغیرهای مکالمه اختصاص دهید، که می تواند در مکالمات بعدی به طور مداوم به آن ها مراجعه شود. + +
+ +*** + +### مثال های سناریو استفاده + +با استفاده از گره اختصاص دهنده متغیر، می توانید زمینه را از فرآیند مکالمه، فایل های آپلود شده در کادر گفتگو (به زودی در دسترس خواهد بود) و اطلاعات ترجیحی کاربر را در متغیرهای مکالمه بنویسید. سپس می توانید به این متغیرهای ذخیره شده در مکالمات بعدی مراجعه کنید تا جریان پردازش متفاوتی را هدایت یا پاسخ هایی را تدوین کنید. + +**سناریو 1** + +می توانید **زمینه در حین مکالمه، فایل آپلود شده در کادر چت (به زودی در دسترس خواهد بود)، اطلاعات ترجیحی وارد شده توسط کاربر و غیره** را با استفاده از گره **اختصاص دهنده متغیر** در متغیر مکالمه بنویسید. این اطلاعات ذخیره شده را می توان در چت های بعدی برای هدایت جریان های پردازش متفاوت یا ارائه پاسخ ها به آن ها مراجعه کرد. + +**سناریو 1** + +**به طور خودکار محتوا را قضاوت و استخراج کنید**، سابقه را در مکالمه ذخیره کنید، اطلاعات مهم کاربر را از طریق آرایه متغیر جلسه در مکالمه ثبت کنید و از این محتوای سابقه برای شخصی سازی پاسخ ها در چت های بعدی استفاده کنید. + +مثال: پس از شروع مکالمه، LLM به طور خودکار تعیین می کند که آیا ورودی کاربر حاوی حقایق، ترجیحات یا سابقه چت است که باید به خاطر سپرده شود. اگر اینطور است، LLM ابتدا آن اطلاعات را استخراج و ذخیره می کند، سپس از آن به عنوان زمینه برای پاسخگویی استفاده می کند. اگر اطلاعات جدیدی برای به خاطر سپردن وجود ندارد، LLM مستقیماً از خاطرات مرتبط قبلی برای پاسخ به سؤالات استفاده می کند. + +![](../../../.gitbook/assets/conversation-variables-scenario-1.png) + +**فرآیند پیکربندی:** + +1. **تنظیم متغیرهای مکالمه:** + * ابتدا، یک آرایه متغیرهای مکالمه `memories` از نوع array\[object] را برای ذخیره اطلاعات کاربر، ترجیحات و سابقه چت تنظیم کنید. +2. **تعیین و استخراج خاطرات:** + * یک گره شاخه بندی شرطی اضافه کنید و از LLM برای تعیین اینکه آیا ورودی کاربر حاوی اطلاعات جدیدی است که باید به خاطر سپرده شود، استفاده کنید. + * اگر اطلاعات جدیدی وجود دارد، شاخه بالایی را دنبال کنید و از یک گره LLM برای استخراج این اطلاعات استفاده کنید. + * اگر اطلاعات جدیدی وجود ندارد، شاخه پایین را دنبال کنید و مستقیماً از خاطرات موجود برای پاسخگویی استفاده کنید. +3. **اختصاص/نوشتن متغیر:** + * در شاخه بالایی، از گره اختصاص دهنده متغیر برای الحاق اطلاعات جدیداً استخراج شده به آرایه `memories` استفاده کنید. + * از تابع escape برای تبدیل رشته متنی خروجی داده شده توسط LLM به فرمتی مناسب برای ذخیره سازی در یک array\[object] استفاده کنید. +4. **خواندن و استفاده از متغیر:** + * در گره های LLM بعدی، محتوای آرایه `memories` را به یک رشته تبدیل کنید و آن را به عنوان زمینه در اعلان LLM درج کنید. + * از این خاطرات برای تولید پاسخ های شخصی استفاده کنید. + +کد گره در نمودار فوق به شرح زیر است: + +1. تبدیل رشته به شیء + +```python +import json + +def main(arg1: str) -> object: + try: + # تجزیه رشته JSON ورودی + input_data = json.loads(arg1) + + # استخراج شیء memory + memory = input_data.get("memory", {}) + + # ساخت شیء بازگشتی + result = { + "facts": memory.get("facts", []), + "preferences": memory.get("preferences", []), + "memories": memory.get("memories", []) + } + + return { + "mem": result + } + except json.JSONDecodeError: + return { + "result": "Error: رشته JSON نامعتبر" + } + except Exception as e: + return { + "result": f"Error: {str(e)}" + } +``` + +2. تبدیل شیء به رشته + +```python +import json + +def main(arg1: list) -> str: + try: + # فرض کنید arg1[0] فرهنگ لغت مورد نیاز ما برای پردازش است + context = arg1[0] if arg1 else {} + + # ساخت شیء memory + memory = {"memory": context} + + # تبدیل شیء به یک رشته JSON + json_str = json.dumps(memory, ensure_ascii=False, indent=2) + + # قرار دادن رشته JSON در تگ های + result = f"{json_str}" + + return { + "result": result + } + except Exception as e: + return { + "result": f"Error: {str(e)}" + } +``` + +**سناریو 2** + +**ثبت اولیه ورودی ترجیحات کاربر**: ترجیح زبان ورودی کاربر را در طول مکالمه به خاطر بسپارید و این زبان را در مکالمات بعدی برای پاسخ ها به طور مداوم استفاده کنید. + +مثال: قبل از چت، کاربر "انگلیسی" را در کادر ورودی `language` مشخص می کند. این زبان در متغیر مکالمه نوشته می شود و LLM در پاسخگویی به این اطلاعات مراجعه می کند و در مکالمات بعدی به طور مداوم از "انگلیسی" استفاده می کند. + +
+ +**راهنمای پیکربندی:** + +**تنظیم متغیر مکالمه**: ابتدا یک متغیر مکالمه `language` تنظیم کنید. یک گره قضاوت شرطی در ابتدای جریان مکالمه اضافه کنید تا بررسی کنید که آیا متغیر `language` خالی است. + +**نوشتن/اختصاص متغیر**: در ابتدای اولین دور چت، اگر متغیر `language` خالی باشد، از یک گره LLM برای استخراج زبان ورودی کاربر استفاده کنید، سپس از یک گره اختصاص دهنده متغیر برای نوشتن این نوع زبان در متغیر مکالمه `language` استفاده کنید. + +**خواندن متغیر**: در دورهای مکالمه بعدی، متغیر `language` ترجیح زبان کاربر را ذخیره کرده است. گره LLM برای پاسخگویی با استفاده از نوع زبان ترجیحی کاربر، به متغیر زبان مراجعه می کند. + +**سناریو 3** + +**کمک به بررسی های چک لیست**: ورودی های کاربر را در طول مکالمه با استفاده از متغیرهای مکالمه ثبت کنید، محتوای چک لیست را به روز کنید و در مکالمات بعدی وجود اقلام گم شده را بررسی کنید. + +مثال: پس از شروع مکالمه، LLM از کاربر می خواهد تا مواردی را که مربوط به چک لیست است در کادر چت وارد کند. هنگامی که کاربر محتوای چک لیست را ذکر می کند، آن را به روز می کند و در متغیر مکالمه ذخیره می کند. LLM پس از هر دور گفتگو به کاربر یادآوری می کند که به تکمیل اقلام گم شده ادامه دهد. + +
+ +**فرآیند پیکربندی:** + +* **تنظیم متغیر مکالمه:** ابتدا یک متغیر مکالمه `ai_checklist` تنظیم کنید و به این متغیر در LLM به عنوان زمینه برای بررسی مراجعه کنید. +* **اختصاص/نوشتن متغیر**: در هر دور از گفتگو، مقدار موجود در `ai_checklist` را در گره LLM بررسی کنید و آن را با ورودی کاربر مقایسه کنید. اگر کاربر اطلاعات جدیدی ارائه می دهد، چک لیست را به روز کنید و محتوای خروجی را با استفاده از گره اختصاص دهنده متغیر به `ai_checklist` بنویسید. +* **خواندن متغیر:** مقدار موجود در `ai_checklist` را بخوانید و آن را با ورودی کاربر در هر دور از گفتگو مقایسه کنید تا زمانی که همه اقلام چک لیست کامل شوند. + +*** + +### استفاده از گره اختصاص دهنده متغیر + +روی علامت + در سمت راست گره کلیک کنید، گره "اختصاص دهنده متغیر" را انتخاب کنید و "متغیر اختصاص داده شده" و "تنظیم متغیر" را پر کنید. + +
+ +**تنظیم متغیرها:** + +متغیر اختصاص داده شده: متغیری را که باید به آن اختصاص داده شود، انتخاب کنید، یعنی متغیر مکالمه هدف را که باید به آن اختصاص داده شود، مشخص کنید. + +تنظیم متغیر: متغیری را که باید اختصاص داده شود، انتخاب کنید، یعنی متغیر منبع را که باید تبدیل شود، مشخص کنید. + +با در نظر گرفتن منطق اختصاص در شکل بالا به عنوان مثال: آیتم خروجی متن `Language Recognition/text` را از گره قبلی به متغیر مکالمه `language` اختصاص دهید. + +**حالت نوشتن:** + +* بازنویسی: محتوای متغیر منبع را در متغیر مکالمه هدف بازنویسی می کند +* ضمیمه: هنگامی که متغیر مشخص شده از نوع آرایه است +* پاکسازی: محتوای موجود در متغیر مکالمه هدف را پاک می کند + diff --git a/fa/guides/workflow/orchestrate-node.md b/fa/guides/workflow/orchestrate-node.md new file mode 100644 index 000000000..875a34567 --- /dev/null +++ b/fa/guides/workflow/orchestrate-node.md @@ -0,0 +1,100 @@ +# هماهنگ‌سازی گره + +هر دو برنامه Chatflow و Workflow از طریق کشیدن و رها کردن بصری، از هماهنگ‌سازی گره پشتیبانی می‌کنند، و دو الگوی طراحی هماهنگ‌سازی را ارائه می‌دهند: سریال و موازی. + +![](../../.gitbook/assets/orchestrate-node.jpeg) + +## الگوی طراحی گره سریال + +در این الگو، گره‌ها به ترتیب از پیش تعیین شده به طور متوالی اجرا می‌شوند. هر گره فقط پس از تکمیل کار گره قبلی و تولید خروجی، عملیات خود را آغاز می‌کند. این امر به اطمینان از اجرای وظایف در یک توالی منطقی کمک می‌کند. + +یک برنامه Workflow "تولید رمان" را در نظر بگیرید که الگوی سریال را پیاده‌سازی می‌کند: پس از اینکه کاربر سبک، ریتم و شخصیت‌های رمان را وارد می‌کند، LLM به طور متوالی طرح، داستان و پایان رمان را کامل می‌کند. هر گره بر اساس خروجی گره قبلی کار می‌کند و ثبات در سبک رمان را تضمین می‌کند. + +### طراحی ساختار سریال + +1. برای درج یک گره سریال جدید، روی نماد `+` بین دو گره کلیک کنید. +2. گره‌ها را به طور متوالی به هم متصل کنید. +3. همه مسیرها را به گره "پایان" برای نهایی کردن گردش کار همگرا کنید. + +![](../../.gitbook/assets/orchestrate-node-serial-design.png) + +### مشاهده لاگ‌های برنامه با ساختار سریال + +در یک برنامه با ساختار سریال، لاگ‌ها عملیات گره‌ها را به ترتیب نمایش می‌دهند. برای مشاهده فرآیند کامل گردش کار، از جمله ورودی/خروجی، مصرف توکن و زمان اجرا برای هر گره، روی "مشاهده لاگ‌ها - ردیابی" در گوشه سمت راست بالای کادر گفتگو کلیک کنید. + +![](../../.gitbook/assets/viewing-serial-structure-app-logs.png) + +## طراحی ساختار موازی + +این الگوی معماری، اجرای همزمان چندین گره را امکان‌پذیر می‌کند. گره قبلی می‌تواند همزمان چندین گره را در ساختار موازی فعال کند. این گره‌های موازی به طور مستقل عمل می‌کنند، وظایف را به طور همزمان اجرا می‌کنند و به طور قابل توجهی کارایی کلی گردش کار را افزایش می‌دهند. + +یک برنامه گردش کار ترجمه را در نظر بگیرید که معماری موازی را پیاده‌سازی می‌کند: پس از اینکه کاربر متن منبع را وارد می‌کند و گردش کار را فعال می‌کند، همه گره‌ها در ساختار موازی به طور همزمان دستورالعمل‌هایی را از گره قبلی دریافت می‌کنند. این امر اجازه می‌دهد تا ترجمه به طور همزمان به چندین زبان انجام شود و زمان پردازش کلی را به طور قابل توجهی کاهش می‌دهد. + +### الگوی طراحی ساختار موازی + +چهار روش زیر نشان می‌دهد که چگونه می‌توان از طریق افزودن گره یا دستکاری بصری، یک ساختار موازی ایجاد کرد: + +**روش ۱** روی یک گره بروید تا دکمه `+` ظاهر شود. برای افزودن چندین گره روی آن کلیک کنید و به طور خودکار یک ساختار موازی تشکیل می‌شود. + +![](../../.gitbook/assets/orchestrate-node-parallel-design-method-1.png) + +**روش ۲** با کشیدن دکمه `+` یک گره، یک اتصال از یک گره ایجاد کنید و یک ساختار موازی ایجاد کنید. + +![](../../.gitbook/assets/orchestrate-node-parallel-design-method-2.png) + +**روش ۳** با چندین گره روی بوم، آنها را به صورت بصری بکشید و به هم متصل کنید تا یک ساختار موازی تشکیل شود. + +![](../../.gitbook/assets/orchestrate-node-parallel-design-method-3.png) + +**روش ۴** علاوه بر روش‌های مبتنی بر بوم، می‌توانید از طریق بخش "گام بعدی" در پنل سمت راست یک گره، ساختارهای موازی ایجاد کنید. این روش به طور خودکار پیکربندی موازی را ایجاد می‌کند. + +![](../../../img/orchestrate-node-parallel-design-method-4.jpeg) + +**نکات:** + +* هر گره می‌تواند به عنوان گره پایین‌دست یک ساختار موازی عمل کند؛ +* برنامه‌های Workflow به یک گره "پایان" واحد و منحصر به فرد نیاز دارند؛ +* برنامه‌های Chatflow از چندین گره "پاسخ" پشتیبانی می‌کنند. هر ساختار موازی در این برنامه‌ها باید با یک گره "پاسخ" خاتمه یابد تا خروجی صحیح محتوا تضمین شود؛ +* همه ساختارهای موازی به طور همزمان اجرا می‌شوند؛ گره‌ها در ساختار موازی پس از تکمیل وظایف خود نتایج را خروجی می‌کنند، بدون هیچ‌گونه رابطه ترتیبی در خروجی. هرچه ساختار موازی ساده‌تر باشد، خروجی نتایج سریعتر خواهد بود. + +![](../../.gitbook/assets/orchestrate-node-chatflow-multi-answer.png) + +### طراحی الگوهای ساختار موازی + +چهار الگوی زیر، طراحی‌های رایج ساختار موازی را نشان می‌دهند: + +#### ۱. موازی معمولی + +موازی معمولی به رابطه `شروع | گره‌های موازی | پایان سه لایه` اشاره دارد، که کوچکترین واحد ساختار موازی نیز هست. این ساختار بصری است و اجازه می‌دهد گردش کار پس از ورودی کاربر، چندین کار را به طور همزمان اجرا کند. + +حداکثر تعداد شاخه‌های موازی ۱۰ است. + +![](../../.gitbook/assets/orchestrate-node-simple-parallel.png) + +#### ۲. موازی تو در تو + +موازی تو در تو به رابطه `شروع | ساختارهای موازی متعدد | پایان چند لایه` اشاره دارد. این ساختار برای گردش کارهای پیچیده‌تر مناسب است، مانند نیاز به درخواست API خارجی در یک گره خاص و به طور همزمان ارسال نتایج برگشتی به گره‌های پایین‌دست برای پردازش. + +یک گردش کار از حداکثر ۳ لایه از روابط تو در تو پشتیبانی می‌کند. + +![](../../.gitbook/assets/orchestrate-node-nested-parallel.png) + +#### ۳. شاخه شرطی + موازی + +ساختارهای موازی را می‌توان در ارتباط با شاخه‌های شرطی نیز استفاده کرد. + +![](../../.gitbook/assets/orchestrate-node-conditional-branch-parallel.png) + +#### ۴. شاخه تکرار + موازی + +این الگو ساختارهای موازی را در شاخه‌های تکرار ادغام می‌کند و کارایی اجرای وظایف تکراری را بهینه می‌کند. + +![](../../.gitbook/assets/orchestrate-node-iteration-parallel.png) + +### مشاهده لاگ‌های برنامه با ساختار موازی + +برنامه‌هایی با ساختار موازی، لاگ‌ها را در یک فرمت درختی تولید می‌کنند. گروه‌های گره موازی قابل جمع شدن، مشاهده لاگ‌های گره‌های فردی را آسان‌تر می‌کند. + +![](../../.gitbook/assets/orchestrate-node-parallel-logs.png) + + diff --git a/fa/guides/workflow/publish.md b/fa/guides/workflow/publish.md new file mode 100644 index 000000000..eaf491db0 --- /dev/null +++ b/fa/guides/workflow/publish.md @@ -0,0 +1,19 @@ +# انتشار برنامه + +پس از اتمام اشکال زدایی، با کلیک بر روی "انتشار" در گوشه سمت راست بالا، می توانید گردش کار را به عنوان انواع مختلفی از برنامه ها ذخیره و به سرعت منتشر کنید. + +
+ +برنامه های گفتگوی می توانند به عنوان موارد زیر منتشر شوند: + +* اجرای برنامه +* جاسازی در سایت +* دسترسی به مرجع API + +برنامه های گردش کار را می توان به عنوان موارد زیر منتشر کرد: + +* اجرای برنامه +* اجرای دسته ای برنامه +* دسترسی به مرجع API + +همچنین می توانید برای پیش نمایش آخرین نسخه منتشر شده برنامه، بر روی "بازگردانی" کلیک کنید. تأیید بازگردانی، از آخرین نسخه منتشر شده گردش کار برای بازنویسی نسخه فعلی گردش کار استفاده خواهد کرد. diff --git a/fa/guides/workflow/variables.md b/fa/guides/workflow/variables.md new file mode 100644 index 000000000..7264686b7 --- /dev/null +++ b/fa/guides/workflow/variables.md @@ -0,0 +1,83 @@ +--- +description: آخرین ویرایش توسط آلن، نویسنده فنی Dify +--- + +# متغیرها + +**برنامه‌های گردش کار** و **چت‌فلو** از گره‌های مستقل تشکیل شده‌اند. اکثر گره‌ها دارای ورودی و خروجی هستند، اما اطلاعات ورودی و خروجی هر گره ثابت نیست و پویا است. + +**چگونه از یک نماد ثابت برای اشاره به محتوای پویا در حال تغییر استفاده کنیم؟** متغیرها، به عنوان ظروف داده پویا، می‌توانند محتوای ثابت نشده را ذخیره و منتقل کنند، به طور متقابل در گره‌های مختلف به آنها ارجاع داده شوند و انعطاف‌پذیری تحرک اطلاعات را بین گره‌ها فراهم کنند. + +### متغیرهای سیستمی + +متغیرهای سیستمی به پارامترهای از پیش تعیین شده در سطح سیستم در برنامه Chatflow / Workflow App اشاره دارند که می‌توانند به طور جهانی توسط سایر گره‌ها خوانده شوند. تمام متغیرهای سطح سیستم با `sys.` شروع می‌شوند. + +#### گردش کار + +برنامه‌های نوع گردش کار متغیرهای سیستمی زیر را ارائه می‌دهند: + +
نام متغیرنوع دادهتوضیحاتنکته

sys.files

[LEGACY]

Array[File]پارامتر فایل: تصاویر آپلود شده توسط کاربران را ذخیره می‌کندبرای فعال کردن عملکرد آپلود تصویر، باید ویژگی "ویژگی‌ها" را در گوشه سمت راست بالای صفحه تنظیم برنامه فعال کنید.
sys.user_idStringشناسه کاربری: یک شناسه منحصر به فرد که توسط سیستم به طور خودکار به هر کاربر هنگام استفاده از برنامه گردش کار اختصاص داده می‌شود. برای تشخیص کاربران مختلف استفاده می‌شود
sys.app_idStringشناسه برنامه: یک شناسه منحصر به فرد که توسط سیستم به طور خودکار به هر برنامه اختصاص داده می‌شود. این پارامتر برای ضبط اطلاعات اولیه برنامه فعلی استفاده می‌شود. این پارامتر برای تمایز و یافتن برنامه‌های گردش کار مجزا برای کاربران با قابلیت‌های توسعه استفاده می‌شود.
sys.workflow_idStringشناسه گردش کار: این پارامتر اطلاعات مربوط به تمام اطلاعات گره در برنامه گردش کار فعلی را ثبت می‌کند.این پارامتر می‌تواند توسط کاربران با قابلیت‌های توسعه برای ردیابی و ثبت اطلاعات مربوط به گره‌های موجود در یک گردش کار استفاده شود.
sys.workflow_run_idStringشناسه اجرای گردش کار: برای ثبت وضعیت زمان اجرا و لاگ‌های اجرای یک برنامه گردش کار استفاده می‌شود.این پارامتر می‌تواند توسط کاربران با قابلیت‌های توسعه برای ردیابی سوابق اجرای تاریخی برنامه استفاده شود.
+ +

متغیرهای سیستمی برنامه گردش کار

+ +#### چت‌فلو + +برنامه‌های نوع چت‌فلو متغیرهای سیستمی زیر را ارائه می‌دهند: + +
نام متغیرنوع دادهتوضیحاتنکته
sys.queryStringمحتوای وارد شده توسط کاربر در کادر چت.
sys.filesArray[File]پارامتر فایل: تصاویر آپلود شده توسط کاربران را ذخیره می‌کندبرای فعال کردن عملکرد آپلود تصویر، باید ویژگی "ویژگی‌ها" را در گوشه سمت راست بالای صفحه تنظیم برنامه فعال کنید.
sys.dialogue_countNumber

تعداد دورهای مکالمه در طول تعامل کاربر با یک برنامه چت‌فلو. این شمارش به طور خودکار پس از هر دور چت یک واحد افزایش می‌یابد و می‌تواند با گره‌های if-else ترکیب شود تا منطق انشعاب غنی ایجاد شود.

به عنوان مثال، LLM تاریخچه مکالمه را در دور X مکالمه بررسی می‌کند و به طور خودکار یک تحلیل ارائه می‌دهد.

sys.conversation_idStringیک شناسه منحصر به فرد برای جلسه تعامل کادر چت، که تمام پیام‌های مرتبط را در یک مکالمه گروه بندی می‌کند و اطمینان می‌دهد که LLM گفتگو را در همان موضوع و زمینه ادامه می‌دهد.
sys.user_idStringیک شناسه منحصر به فرد برای هر کاربر برنامه اختصاص داده می‌شود تا کاربران مکالمه مختلف را از هم متمایز کند.
+ +
متغیرهای سیستمی برنامه چت‌فلو

متغیرهای سیستمی برنامه چت‌فلو

+ +### متغیرهای محیطی + +**متغیرهای محیطی برای محافظت از اطلاعات حساس درگیر در گردش کار استفاده می‌شوند**، مانند کلیدهای API و رمزهای عبور پایگاه داده که هنگام اجرای گردش کار استفاده می‌شوند. آنها در گردش کار ذخیره می‌شوند و نه در کد، به طوری که می‌توان آنها را در محیط‌های مختلف به اشتراک گذاشت. + +
متغیرهای محیطی

متغیرهای محیطی

+ +از سه نوع داده زیر پشتیبانی می‌کند: + +* String +* Number +* Secret + +متغیرهای محیطی دارای ویژگی‌های زیر هستند: + +* متغیرهای محیطی می‌توانند به طور جهانی در اکثر گره‌ها به آنها ارجاع داده شوند. +* نام متغیرهای محیطی نمی‌تواند تکراری باشد. +* متغیرهای خروجی گره‌ها معمولاً فقط خواندنی هستند و قابل نوشتن نیستند. + +*** + +### متغیرهای مکالمه + +> متغیرهای مکالمه فقط برای [Chatflow](variables.md#chatflow-and-workflow) App قابل استفاده هستند. + +**متغیرهای مکالمه به توسعه دهندگان برنامه اجازه می‌دهد اطلاعات خاصی را مشخص کنند که باید به طور موقت در همان جلسه Chatflow ذخیره شوند و اطمینان حاصل شود که این اطلاعات می‌تواند در چندین دور چت در چت‌فلو فعلی به آنها ارجاع داده شود**. این می‌تواند شامل زمینه، فایل‌های آپلود شده به کادر چت (به زودی)، تنظیمات کاربر که در حین مکالمه وارد می‌شوند، و غیره باشد. این مانند ارائه یک "یادداشت" برای LLM است که می‌تواند در هر زمان بررسی شود، از سوگیری اطلاعات ناشی از خطاهای حافظه LLM جلوگیری می‌کند. + +به عنوان مثال، می‌توانید زبان ترجیحی وارد شده توسط کاربر در دور اول چت را در یک متغیر مکالمه ذخیره کنید. LLM هنگام پاسخ دادن به اطلاعات موجود در متغیر مکالمه ارجاع می‌دهد و از زبان مشخص شده برای پاسخ دادن به کاربر در چت‌های بعدی استفاده می‌کند. + +

متغیر مکالمه

+ +**متغیرهای مکالمه** از شش نوع داده زیر پشتیبانی می‌کنند: + +* String +* Number +* Object +* Array\[string] +* Array\[number] +* Array\[object] + +**متغیرهای مکالمه** دارای ویژگی‌های زیر هستند: + +* متغیرهای مکالمه می‌توانند به طور جهانی در اکثر گره‌های موجود در همان برنامه Chatflow App به آنها ارجاع داده شوند. +* نوشتن در متغیرهای مکالمه نیاز به استفاده از گره [Variable Assigner](https://docs.dify.ai/guides/workflow/node/variable-assignment) دارد. +* متغیرهای مکالمه متغیرهای خواندنی/نوشتنی هستند. + +در مورد نحوه استفاده از متغیرهای مکالمه با گره Variable Assigner، لطفاً به [Variable Assigner](node/variable-assignment.md) مراجعه کنید. + +### اطلاعیه + +* برای جلوگیری از تکراری شدن نام متغیر، نام گره نباید تکرار شود. +* متغیرهای خروجی گره‌ها معمولاً متغیرهای ثابتی هستند و قابل ویرایش نیستند. + + diff --git a/fa/guides/workspace/README.md b/fa/guides/workspace/README.md new file mode 100644 index 000000000..3e1aee576 --- /dev/null +++ b/fa/guides/workspace/README.md @@ -0,0 +1,15 @@ +# همکاری + +Dify یک پلتفرم چند کاربره است که فضاهای کاری واحدهای اصلی همکاری تیمی هستند. اعضای یک فضای کاری می‌توانند برنامه‌ها و پایگاه‌های دانش را ایجاد و ویرایش کنند و همچنین می‌توانند مستقیماً از برنامه‌های عمومی ایجاد شده توسط سایر اعضای تیم در ناحیه [Discover](app.md) استفاده کنند. + +### روش‌های ورود + +لازم به ذکر است که روش‌های ورود پشتیبانی شده توسط سرویس ابری Dify و نسخه جامعه متفاوت هستند، همانطور که در جدول زیر نشان داده شده است. + +
نسخه جامعه & Dify PremiumDify Cloudنسخه سازمانی
ورود با ایمیلپشتیبانی شدهپشتیبانی نشدهپشتیبانی شده
ورود با GitHubپشتیبانی نشدهپشتیبانی شده-
ورود با Googleپشتیبانی نشدهپشتیبانی شده-
ورود SSOپشتیبانی نشدهپشتیبانی نشدهپشتیبانی شده
+ +### ایجاد حساب + +اگر از سرویس ابری استفاده می‌کنید، یک فضای کاری به طور خودکار هنگام اولین ورود به سیستم برای شما ایجاد می‌شود و شما مدیر آن می‌شوید. + +در نسخه جامعه، در هنگام نصب از شما خواسته می‌شود که یک ایمیل و رمز عبور مدیر تنظیم کنید. نسخه جامعه از ایجاد فضاهای کاری متعدد پشتیبانی نمی‌کند. diff --git a/fa/guides/workspace/app.md b/fa/guides/workspace/app.md new file mode 100644 index 000000000..8e63205d5 --- /dev/null +++ b/fa/guides/workspace/app.md @@ -0,0 +1,19 @@ +# کشف + +## برنامه‌های الگو + +در بخش **کشف**، چندین برنامه الگو پرکاربرد ارائه شده است. این برنامه‌ها حوزه‌هایی مانند منابع انسانی، دستیارها، ترجمه، برنامه‌نویسی و نوشتن را پوشش می‌دهند. + +
+ +برای استفاده از یک برنامه الگو، روی دکمه "اضافه به فضای کاری" در الگو کلیک کنید. سپس می‌توانید از برنامه در فضای کاری سمت چپ استفاده کنید. + +
+ +برای تغییر یک الگو و ایجاد یک برنامه جدید، روی دکمه "شخصی سازی" در الگو کلیک کنید. + +## فضای کاری + +فضای کاری به عنوان مسیریابی برای برنامه‌ها عمل می‌کند. برای استفاده مستقیم از یک برنامه، روی آن در فضای کاری کلیک کنید. + +برنامه‌های موجود در فضای کاری شامل برنامه‌های شخصی شما و برنامه‌های افزوده شده به فضای کاری توسط سایر اعضای تیم است. diff --git a/fa/guides/workspace/app/README.md b/fa/guides/workspace/app/README.md new file mode 100644 index 000000000..f9d3e34d5 --- /dev/null +++ b/fa/guides/workspace/app/README.md @@ -0,0 +1,19 @@ +# کشف + +## الگوهای کاربردی + +در بخش **کشف**، چند الگوی کاربردی رایج وجود دارد. این الگوها به حوزه‌هایی مانند منابع انسانی، دستیاران، ترجمه، برنامه‌نویسی و نوشتن مربوط می‌شوند. + +
+ +برای استفاده از یک الگوی کاربردی، روی دکمه "اضافه به فضای کاری" در الگو کلیک کنید. سپس می‌توانید از این برنامه در فضای کاری سمت چپ استفاده کنید. + +
+ +برای تغییر یک الگو و ایجاد یک برنامه جدید، روی دکمه "تخصیص" در الگو کلیک کنید. + +## فضای کاری + +فضای کاری به عنوان ناوبری برای برنامه‌ها عمل می‌کند. روی یک برنامه در فضای کاری کلیک کنید تا مستقیماً از آن استفاده کنید. + +برنامه‌های موجود در فضای کاری شامل برنامه‌های خودتان و همچنین برنامه‌های اضافه شده به فضای کاری توسط سایر اعضای تیم می‌شود. diff --git a/fa/guides/workspace/billing.md b/fa/guides/workspace/billing.md new file mode 100644 index 000000000..eda2f8d43 --- /dev/null +++ b/fa/guides/workspace/billing.md @@ -0,0 +1,55 @@ +--- +description: درباره برنامه‌های صورت‌حساب‌دهی دیفای برای پشتیبانی از افزایش استفاده خود بیشتر بدانید. +--- + +# صورت‌حساب‌دهی + +## صورت‌حساب‌دهی مبتنی بر فضای کاری + +پلتفرم دیفای دارای "فضاهای کاری" و "برنامه‌ها" است. یک فضای کاری می‌تواند چندین برنامه را شامل شود. هر برنامه دارای قابلیت‌هایی مانند تنظیمات سریع، فراخوانی LLM، دانش RAG، ورود به سیستم و حاشیه‌نویسی و ارائه API استاندارد است. **ما توصیه می‌کنیم که یک تیم یا سازمان از یک فضای کاری استفاده کند، زیرا سیستم ما بر اساس هر فضای کاری صورت‌حساب صادر می‌کند (محاسبه شده از کل مصرف منابع در یک فضای کاری)**. مثلاً: + +```Plaintext + +فضای کاری 1 +برنامه 1(سریع، RAG، LLM، پایگاه دانش، ورود به سیستم و حاشیه‌نویسی، API) +برنامه 2(سریع، RAG، LLM، پایگاه دانش، ورود به سیستم و حاشیه‌نویسی، API) +برنامه 3(سریع، RAG، LLM، پایگاه دانش، ورود به سیستم و حاشیه‌نویسی، API) +... +فضای کاری 2 +``` + +## سهمیه‌های طرح و ویژگی‌ها + +ما یک طرح رایگان برای همه کاربران ارائه می‌دهیم تا ایده‌های برنامه AI خود را آزمایش کنید، از جمله 200 تماس پیام مدل OpenAI. پس از استفاده از سهمیه رایگان، باید کلیدهای API LLM را از ارائه دهندگان مدل مختلف تهیه کنید و آن‌ها را در **تنظیمات --> ارائه دهندگان مدل** اضافه کنید تا قابلیت‌های مدل معمولی را فعال کنید. ارتقا فضای کاری شما به یک طرح پولی به معنای باز کردن منابع پولی برای آن فضای کاری است. مثلاً: ارتقا به Professional به شما امکان می‌دهد تا بیش از 10 برنامه (حداکثر 50) با حداکثر 200 مگابایت سهمیه ذخیره‌سازی بردار در کل در بین پروژه‌ها در آن فضای کاری ایجاد کنید. سهمیه‌ها و ویژگی‌های نسخه‌های مختلف به شرح زیر است: + +
معیارSandboxProfessional Team
قیمت‌گذاریرایگان59 دلار در ماه159 دلار در ماه
ارائه دهندگان مدلOpenAI,Anthropic,Azure OpenAI,Llama2,Hugging Face,ReplicateOpenAI,Anthropic,Azure OpenAI, Llama2,Hugging Face,ReplicateOpenAI,Anthropic,Azure OpenAI, Llama2,Hugging Face,Replicate
اعضای تیم13نامحدود
برنامه‌ها1050نامحدود
ذخیره‌سازی بردار5 مگابایت200 مگابایت1 گیگابایت
اولویت پردازش سنداستاندارداولویتاولویت
تغییر لوگو//
درخواست‌های پیام500 در روزنامحدودنامحدود
محدودیت‌های سهمیه درخواست‌های API RAG/√ به زودی√ به زودی
محدودیت‌های سهمیه حاشیه‌نویسی1020005000
مدل نماینده/√ به زودی√ به زودی
تاریخچه ورود به سیستم30 روزنامحدودنامحدود
+ +برای اطلاعات بیشتر به صفحه [قیمت‌گذاری](https://dify.ai/pricing) مراجعه کنید. + +> **ذخیره‌سازی بردار:** ذخیره‌سازی بردار برای ذخیره پایگاه‌های دانش به عنوان بردار برای درک LLM استفاده می‌شود. هر 1 مگابایت می‌تواند حدود 1.2 میلیون کاراکتر داده برداری شده (تخمین زده شده با استفاده از OpenAI Embeddings، متناسب با مدل‌ها متفاوت است) را ذخیره کند. میزان کوچک شدن داده‌ها به پیچیدگی و تکرار در محتوا بستگی دارد. +> +> **محدودیت‌های سهمیه حاشیه‌نویسی:** ویرایش دستی و حاشیه‌نویسی پاسخ‌ها، قابلیت‌های پرسش و پاسخ با کیفیت بالا و قابل تنظیم را برای برنامه‌ها فراهم می‌کند. +> +> **درخواست‌های پیام:** تعداد دفعاتی که API دیفای روزانه در طول جلسات برنامه (به جای مصرف منابع API LLM) فراخوانی می‌شود. این شامل تمام پیام‌های تولید شده از برنامه‌های شما از طریق تماس‌های API یا در طول جلسات WebApp می‌شود. **توجه: سهمیه‌های روزانه در نیمه‌شب به وقت استاندارد اقیانوسیه به روز می‌شوند.** +> +> **درخواست‌های API RAG:** به تعداد تماس‌های API که فقط قابلیت‌های پردازش پایگاه دانش دیفای را فراخوانی می‌کنند، اشاره دارد. + +## نظارت بر مصرف منابع + +می‌توانید جزئیات استفاده از ظرفیت را در صفحه صورت‌حساب‌دهی فضای کاری خود مشاهده کنید. + +

نظارت بر مصرف منابع

+ +## سوالات متداول + +1. اگر مصرف منابع من قبل از ارتقا به یک طرح پولی، سهمیه طرح رایگان را فراتر رود، چه اتفاقی می‌افتد؟ + + > در طول مرحله بتای دیفای، سهمیه‌های مازاد به صورت رایگان برای شروع کار فضاهای کاری کاربران ارائه شد. پس از فعال شدن سیستم صورت‌حساب‌دهی دیفای، داده‌های موجود شما از بین نمی‌رود، اما فضای کاری شما دیگر نمی‌تواند ذخیره‌سازی برداری متن اضافی را پردازش کند. برای ادامه استفاده از دیفای باید به یک طرح مناسب ارتقا دهید. +2. اگر نه طرح Professional و نه طرح Team نیازهای من را برآورده نکند، چه؟ + + > اگر یک شرکت بزرگ هستید که به برنامه‌های پیشرفته‌تر نیاز دارید، لطفاً به آدرس [business@dify.ai](mailto:business@dify.ai) با ما تماس بگیرید. +3. در چه شرایطی باید هنگام استفاده از نسخه CE هزینه پرداخت کنم؟ + + > هنگام استفاده از نسخه CE، لطفاً شرایط مجوز منبع باز ما را دنبال کنید. اگر به استفاده تجاری، مانند حذف لوگوی دیفای یا نیاز به چندین فضای کاری، استفاده از دیفای در یک مدل SaaS نیاز دارید، باید برای مجوز تجاری با ما در آدرس [business@dify.ai](mailto:business@dify.ai) تماس بگیرید. + + diff --git a/fa/guides/workspace/explore.md b/fa/guides/workspace/explore.md new file mode 100644 index 000000000..29fb536f1 --- /dev/null +++ b/fa/guides/workspace/explore.md @@ -0,0 +1,21 @@ +# کشف + +## کاربردهای الگو + +در **اکتشاف > کشف**، برخی از برنامه های الگو که به طور معمول استفاده می شوند، ارائه می شود. این برنامه ها شامل ترجمه، نوشتن، برنامه نویسی و دستیار می شود. + +
+ +اگر می خواهید از یک برنامه الگو استفاده کنید، روی دکمه "افزودن به فضای کاری" الگو کلیک کنید. در فضای کاری سمت چپ، برنامه قابل دسترس است. + +
+ +اگر می خواهید یک الگو را برای ایجاد یک برنامه جدید اصلاح کنید، روی دکمه "سفارشی سازی" الگو کلیک کنید. + +## فضای کاری + +فضای کاری، ناوبری برنامه است. برای استفاده مستقیم از برنامه، روی یک برنامه در فضای کاری کلیک کنید. + +
+ +برنامه های موجود در فضای کاری شامل: برنامه های شما و برنامه هایی هستند که توسط تیم های دیگر به فضای کاری اضافه شده اند. diff --git a/fa/guides/workspace/invite-and-manage-members.md b/fa/guides/workspace/invite-and-manage-members.md new file mode 100644 index 000000000..ca2b073cd --- /dev/null +++ b/fa/guides/workspace/invite-and-manage-members.md @@ -0,0 +1,13 @@ +# دعوت و مدیریت اعضا + +مالکان و مدیران می‌توانند اعضا را به یک فضای کاری دعوت کرده و آنها را مدیریت کنند. پس از ورود به سیستم، به تنظیمات در زیر منوی کشویی آواتار کاربر در Dify بروید و رابط مدیریت عضو را از سمت چپ آن صفحه باز کنید. + +### دعوت از اعضا + +ایمیل دعوت شونده را وارد کنید. سیستم بلافاصله دسترسی به فضای کاری را به دعوت شونده اعطا می‌کند و دعوت شونده نیز یک اعلان ایمیل دریافت خواهد کرد. + +سیستم به طور خودکار یک حساب Dify برای عضو جدید ایجاد خواهد کرد. + +### حذف اعضا + +پس از حذف یک عضو از تیم، او دیگر به فضای کاری فعلی دسترسی نخواهد داشت. با این حال، این موضوع روی دسترسی آنها به سایر فضاهایی که قبلاً به آنها پیوسته‌اند، تأثیری نخواهد داشت. diff --git a/fa/learn-more/extended-reading/README.md b/fa/learn-more/extended-reading/README.md new file mode 100644 index 000000000..d42ad0206 --- /dev/null +++ b/fa/learn-more/extended-reading/README.md @@ -0,0 +1 @@ +# تحت تعمیر diff --git a/fa/learn-more/extended-reading/how-to-use-json-schema-in-dify.md b/fa/learn-more/extended-reading/how-to-use-json-schema-in-dify.md new file mode 100644 index 000000000..ddc758d06 --- /dev/null +++ b/fa/learn-more/extended-reading/how-to-use-json-schema-in-dify.md @@ -0,0 +1,224 @@ +# نحوه استفاده از خروجی JSON Schema در Dify + +JSON Schema یک مشخصات برای توصیف ساختارهای داده JSON است. توسعه دهندگان می توانند ساختارهای JSON Schema را تعریف کنند تا مشخص کنند که خروجی LLM کاملاً مطابق با داده ها یا محتوا تعریف شده است، مانند تولید ساختارهای شفاف سند یا کد. + +## مدل هایی که از قابلیت JSON Schema پشتیبانی می کنند + +* `gpt-4o-mini-2024-07-18` و نسخه های بعدی +* `gpt-4o-2024-08-06` و نسخه های بعدی + +> برای اطلاعات بیشتر در مورد قابلیت های خروجی ساخت یافته مدل های سری OpenAI، لطفاً به [خروجی های ساخت یافته](https://platform.openai.com/docs/guides/structured-outputs/introduction) مراجعه کنید. + +## نحوه استفاده از خروجی های ساخت یافته + +1. LLM را به ابزارها، توابع، داده ها و سایر اجزا در سیستم متصل کنید. `strict: true` را در تعریف تابع تنظیم کنید. با فعال شدن این ویژگی، قابلیت خروجی های ساخت یافته تضمین می کند که پارامترهای تولید شده توسط LLM برای تماس های تابع دقیقاً با JSON Schema که در تعریف تابع ارائه کرده اید مطابقت دارد. +2. هنگامی که LLM به کاربران پاسخ می دهد، محتوا را در قالب ساخت یافته مطابق با تعاریف موجود در JSON Schema خروجی می دهد. + +## فعال کردن JSON Schema در Dify + +LLM را در برنامه خود به یکی از مدل هایی که از خروجی JSON Schema پشتیبانی می کنند تغییر دهید. سپس، در فرم تنظیمات، `JSON Schema` را فعال کنید و الگوی JSON Schema را پر کنید. همزمان، ستون `response_format` را فعال کنید و آن را به فرمت `json_schema` تغییر دهید. + +![](../../.gitbook/assets/learn-more-json-schema.png) + +محتوای تولید شده توسط LLM از خروجی در فرمت زیر پشتیبانی می کند: + +* **متن:** خروجی در قالب متن + +## تعریف الگوهای JSON Schema + +می توانید به فرمت JSON Schema زیر مراجعه کنید تا محتوای الگوی خود را تعریف کنید: + +```json +{ + "name": "template_schema", + "description": "یک الگوی عمومی برای JSON Schema", + "strict": true, + "schema": { + "type": "object", + "properties": { + "field1": { + "type": "string", + "description": "توضیحات field1" + }, + "field2": { + "type": "number", + "description": "توضیحات field2" + }, + "field3": { + "type": "array", + "description": "توضیحات field3", + "items": { + "type": "string" + } + }, + "field4": { + "type": "object", + "description": "توضیحات field4", + "properties": { + "subfield1": { + "type": "string", + "description": "توضیحات subfield1" + } + }, + "required": ["subfield1"], + "additionalProperties": false + } + }, + "required": ["field1", "field2", "field3", "field4"], + "additionalProperties": false + } +} +``` + +راهنمای گام به گام: + +1. تعریف اطلاعات اولیه: + * `name` را تنظیم کنید: یک نام توصیفی برای طرح خود انتخاب کنید. + * `description` را اضافه کنید: هدف طرح را به طور خلاصه توضیح دهید. + * `strict` را روی true تنظیم کنید: برای اطمینان از حالت سختگیرانه. +2. شی `schema` را ایجاد کنید: + * `type: "object"` را تنظیم کنید تا سطح ریشه به عنوان یک نوع شی مشخص شود. + * یک شی `properties` برای تعریف تمام فیلدها اضافه کنید. +3. تعریف فیلدها: + * برای هر فیلد، از جمله `type` و `description`، یک شی ایجاد کنید. + * انواع رایج: `string`، `number`، `boolean`، `array`، `object`. + * برای آرایه ها، از `items` برای تعریف انواع عناصر استفاده کنید. + * برای اشیاء، `properties` را به طور بازگشتی تعریف کنید. +4. تنظیم محدودیت ها: + * یک آرایه `required` در هر سطح اضافه کنید که تمام فیلدهای مورد نیاز را لیست کند. + * `additionalProperties: false` را در هر سطح شی تنظیم کنید. +5. پردازش فیلدهای خاص: + * از `enum` برای محدود کردن مقادیر اختیاری استفاده کنید. + * از `$ref` برای پیاده سازی ساختارهای بازگشتی استفاده کنید. + +## مثال + +### 1. زنجیره تفکر (routine) + +**مثال JSON Schema** + +```json +{ + "name": "math_reasoning", + "description": "ثبت مراحل و پاسخ نهایی برای استدلال ریاضی", + "strict": true, + "schema": { + "type": "object", + "properties": { + "steps": { + "type": "array", + "description": "آرایه ای از مراحل استدلال", + "items": { + "type": "object", + "properties": { + "explanation": { + "type": "string", + "description": "توضیح مرحله استدلال" + }, + "output": { + "type": "string", + "description": "خروجی مرحله استدلال" + } + }, + "required": ["explanation", "output"], + "additionalProperties": false + } + }, + "final_answer": { + "type": "string", + "description": "پاسخ نهایی به مسئله ریاضی" + } + }, + "additionalProperties": false, + "required": ["steps", "final_answer"] + } +} +``` + +**راهنمایی ها** + +``` +شما یک معلم ریاضی مفید هستید. یک مسئله ریاضی به شما ارائه می شود، +و هدف شما این است که یک راه حل گام به گام، همراه با پاسخ نهایی را خروجی دهید. +برای هر مرحله، فقط خروجی را به عنوان یک معادله ارائه دهید. از فیلد توضیح برای جزئیات استدلال استفاده کنید. +``` + +### تولید UI (حالت بازگشتی ریشه) + +**مثال JSON Schema** + +```json +{ + "name": "ui", + "description": "UI به صورت پویا تولید شده", + "strict": true, + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "نوع جزء UI", + "enum": ["div", "button", "header", "section", "field", "form"] + }, + "label": { + "type": "string", + "description": "برچسب جزء UI، برای دکمه ها یا فیلدهای فرم استفاده می شود" + }, + "children": { + "type": "array", + "description": "اجزای UI تو در تو", + "items": { + "$ref": "#" + } + }, + "attributes": { + "type": "array", + "description": "ویژگی های دلخواه برای جزء UI، مناسب برای هر عنصر", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "نام ویژگی، به عنوان مثال onClick یا className" + }, + "value": { + "type": "string", + "description": "مقدار ویژگی" + } + }, + "additionalProperties": false, + "required": ["name", "value"] + } + } + }, + "required": ["type", "label", "children", "attributes"], + "additionalProperties": false + } + } +``` + +**راهنمایی ها** + +``` +شما یک هوش مصنوعی تولید کننده UI هستید. ورودی کاربر را به یک UI تبدیل کنید. +``` + +**مثال خروجی:** + +![](../../.gitbook/assets/best-practice-json-schema-ui-example.png) + +## نکات + +* مطمئن شوید که راهنمایی برنامه شامل دستورالعمل هایی در مورد نحوه رسیدگی به مواردی است که ورودی کاربر نمی تواند پاسخ معتبر را تولید کند. +* مدل همیشه تلاش می کند تا طرح ارائه شده را دنبال کند. اگر محتوای ورودی کاملاً با طرح مشخص شده ارتباطی نداشته باشد، ممکن است باعث توهم در LLM شود. +* اگر LLM تشخیص دهد که ورودی با کار سازگار نیست، می توانید عباراتی را در راهنمایی برای مشخص کردن بازگشت پارامترهای خالی یا جملات خاص بگنجانید. +* همه فیلدها باید `required` باشند. برای جزئیات، لطفاً به [طرح های پشتیبانی شده](https://platform.openai.com/docs/guides/structured-outputs/supported-schemas) مراجعه کنید. +* `[additionalProperties: false]`(https://platform.openai.com/docs/guides/structured-outputs/additionalproperties-false-must-always-be-set-in-objects) باید همیشه در اشیاء تنظیم شود. +* شیء سطح ریشه طرح باید یک شی باشد. + +## ضمیمه + +* [مقدمه ای بر خروجی های ساخت یافته](https://cookbook.openai.com/examples/structured\_outputs\_intro) +* [خروجی ساخت یافته](https://platform.openai.com/docs/guides/structured-outputs/json-mode?context=without\_parse) + + diff --git a/fa/learn-more/extended-reading/retrieval-augment/README.md b/fa/learn-more/extended-reading/retrieval-augment/README.md new file mode 100644 index 000000000..db48843c3 --- /dev/null +++ b/fa/learn-more/extended-reading/retrieval-augment/README.md @@ -0,0 +1,21 @@ +# نسل تقویت‌شده با بازیابی (RAG) + +### توضیح مفهوم RAG + +معماری RAG، با بازیابی برداری در هسته خود، به چارچوب فنی اصلی برای فعال‌سازی مدل‌های بزرگ برای دسترسی به آخرین دانش خارجی در حالی که به مشکل توهم در محتوای تولید شده رسیدگی می‌کند، تبدیل شده است. این فناوری در سناریوهای کاربردی مختلفی اجرا شده است. + +توسعه‌دهندگان می‌توانند از این فناوری برای ساخت خدمات مشتری مبتنی بر هوش مصنوعی، پایگاه‌های دانش سازمانی، موتورهای جستجوی هوش مصنوعی و موارد دیگر با هزینه کم استفاده کنند. آنها با استفاده از ورودی زبان طبیعی برای تعامل با اشکال مختلف سازماندهی دانش، می‌توانند سیستم‌های هوشمند ایجاد کنند. بیایید یک برنامه نمونه RAG را به عنوان مثال در نظر بگیریم: + +در نمودار زیر، هنگامی که کاربر می‌پرسد: "رئیس جمهور ایالات متحده کیست؟"، سیستم این سؤال را مستقیماً به مدل بزرگ برای پاسخ نمی‌فرستد. در عوض، ابتدا جستجوی برداری را در یک پایگاه دانش (مانند ویکی پدیا که در نمودار نشان داده شده است) انجام می‌دهد تا محتوای مرتبط را از طریق تطبیق شباهت معنایی (مانند "جو بایدن چهل و ششمین و رئیس جمهور فعلی ایالات متحده است...") بیابد. سپس، سیستم سؤال کاربر را به همراه دانش مرتبط بازیابی شده به مدل بزرگ ارائه می‌کند و به آن اجازه می‌دهد تا اطلاعات کافی برای پاسخ به سؤال به طور قابل اعتماد به دست آورد. + +

معماری پایه RAG

+ +**چرا این ضروری است؟** + +ما می‌توانیم یک مدل بزرگ را به عنوان یک متخصص عالی در نظر بگیریم که با زمینه‌های مختلف دانش انسانی آشنا است. با این حال، این مدل محدودیت‌هایی دارد. به عنوان مثال، این مدل اطلاعات شخصی شما را نمی‌داند زیرا این اطلاعات خصوصی است و در اینترنت به طور عمومی در دسترس نیست، بنابراین هیچ فرصت یادگیری قبلی ندارد. + +هنگامی که می‌خواهید این متخصص عالی را به عنوان مشاور مالی شخصی خود استخدام کنید، باید به آنها اجازه دهید سوابق سرمایه‌گذاری، هزینه‌های خانوار و سایر داده‌های شما را قبل از پاسخ به سؤالاتتان بررسی کنند. به این ترتیب، متخصص می‌تواند مشاوره حرفه‌ای را بر اساس شرایط شخصی شما ارائه دهد. + +**این دقیقاً همان کاری است که سیستم RAG انجام می‌دهد: این سیستم به مدل بزرگ کمک می‌کند تا به طور موقت به دانش خارجی که در اختیار ندارد، دسترسی پیدا کند و به آن اجازه می‌دهد تا قبل از پاسخ به سؤالات، پاسخ‌ها را پیدا کند.** + +از مثال بالا، به راحتی می‌توان دید که مهمترین بخش سیستم RAG بازیابی دانش خارجی است. اینکه آیا متخصص می‌تواند مشاوره مالی حرفه‌ای ارائه دهد به این بستگی دارد که آیا آنها می‌توانند اطلاعات لازم را به طور دقیق پیدا کنند. اگر آنها برنامه کاهش وزن شما را به جای سوابق سرمایه‌گذاری شما پیدا کنند، حتی با دانش‌ترین متخصص نیز بی‌قدرت خواهد بود. diff --git a/fa/learn-more/extended-reading/retrieval-augment/hybrid-search.md b/fa/learn-more/extended-reading/retrieval-augment/hybrid-search.md new file mode 100644 index 000000000..07e5994c8 --- /dev/null +++ b/fa/learn-more/extended-reading/retrieval-augment/hybrid-search.md @@ -0,0 +1,88 @@ +# جستجوی ترکیبی + +### چرا جستجوی ترکیبی لازم است؟ + +روش اصلی در مرحله بازیابی RAG (تولید تقویت شده با بازیابی) جستجوی برداری است که بر اساس ارتباط معنایی تطبیق انجام می دهد. اصل فنی شامل تقسیم اسناد در پایگاه دانش خارجی به پاراگراف ها یا جملات معنایی کامل، تبدیل آنها به یک سری اعداد (بردارهای چند بعدی) که کامپیوتر می تواند آنها را درک کند و انجام همان تبدیل بر روی پرس و جوی کاربر است. + +کامپیوتر می تواند روابط معنایی ظریف بین پرس و جوی کاربر و جملات را تشخیص دهد. به عنوان مثال، "گربه ها موش ها را تعقیب می کنند" و "گربه های کوچک موش ها را شکار می کنند" ارتباط معنایی بالاتری نسبت به "گربه ها موش ها را تعقیب می کنند" و "من دوست دارم ژامبون بخورم" خواهند داشت. بعد از یافتن محتوا متن مرتبط ترین، سیستم RAG آن را به عنوان متن برای پرس و جوی کاربر به مدل بزرگ ارائه می دهد و به آن کمک می کند تا به سوال پاسخ دهد. + +علاوه بر فعال کردن بازیابی متن معنایی پیچیده، جستجوی برداری مزایای دیگری نیز دارد: + +* درک معنایی مشابه (به عنوان مثال، موش/تله موش/پنیر، گوگل/بینگ/موتور جستجو) +* درک چند زبانه (درک بین زبانی، مانند تطبیق ورودی انگلیسی با چینی) +* درک چند وجهی (پشتیبانی از تطبیق مشابه متن، تصاویر، صدا، ویدیو و غیره) +* تحمل خطا (پردازش خطاهای املایی و توضیحات مبهم) + +در حالی که جستجوی برداری در سناریوهای فوق مزایای واضحی دارد، در برخی از شرایط مانند موارد زیر ضعیف عمل می کند: + +* جستجو برای نام افراد یا اشیاء (به عنوان مثال، ایلان ماسک، آیفون 15) +* جستجو برای اختصارات یا عبارات (به عنوان مثال، RAG، RLHF) +* جستجو برای شناسه ها (به عنوان مثال، `gpt-3.5-turbo`, `titan-xlarge-v1.01`) + +این نقاط ضعف دقیقا نقاط قوت جستجوی کلمه کلیدی سنتی هستند که در موارد زیر برتری دارند: + +* تطبیق دقیق (به عنوان مثال، نام محصولات، نام افراد، شماره محصولات) +* تطبیق با چند کاراکتر (جستجوی برداری با چند کاراکتر عملکرد ضعیفی دارد، اما بسیاری از کاربران تمایل دارند فقط چند کلمه کلیدی را وارد کنند) +* تطبیق با کلمات کم فرکانس (کلمات کم فرکانس اغلب معنی مهمی در زبان دارند، مانند "آیا دوست دارید با من قهوه بنوشید؟" که "داشتن" و "قهوه" اهمیت بیشتری نسبت به "شما" و "دوست داشتن" دارند) + +برای اکثر سناریوهای جستجوی متن، هدف اصلی اطمینان از این است که مرتبط ترین نتایج بالقوه در نتایج کاندید ظاهر می شوند. جستجوی برداری و جستجوی کلمه کلیدی هر کدام مزایای خود را در زمینه بازیابی دارند. جستجوی ترکیبی نقاط قوت هر دو فناوری جستجو را در کنار هم قرار می دهد و نقاط ضعف آنها را جبران می کند. + +در جستجوی ترکیبی، شما باید شاخص های برداری و شاخص های کلمه کلیدی را از قبل در پایگاه داده ایجاد کنید. هنگامی که یک پرس و جوی کاربری وارد می شود، مرتبط ترین متون از اسناد با استفاده از هر دو روش بازیابی بازیابی می شوند. + +

جستجوی ترکیبی

+ +"جستجوی ترکیبی" تعریف دقیقی ندارد. این مقاله از ترکیب جستجوی برداری و جستجوی کلمه کلیدی به عنوان یک مثال استفاده می کند. اگر از ترکیبات دیگری از الگوریتم های جستجو استفاده کنیم، می توان آن را "جستجوی ترکیبی" نامید. به عنوان مثال، می توانیم تکنیک های نمودار دانش را برای بازیابی روابط موجودیت با تکنیک های جستجوی برداری ترکیب کنیم. + +سیستم های بازیابی مختلف در یافتن روابط ظریف مختلف بین متون (پاراگراف ها، جملات، کلمات) مهارت دارند، از جمله روابط دقیق، روابط معنایی، روابط موضوعی، روابط ساختاری، روابط موجودیت، روابط زمانی، روابط رویداد و غیره. هیچ حالت بازیابی واحدی نمی تواند برای تمام سناریوها مناسب باشد. **جستجوی ترکیبی با ترکیب چندین سیستم بازیابی، مکمل بودن بین چندین فناوری بازیابی را به دست می آورد.** + +### جستجوی برداری + +تعریف: ایجاد تعبیه پرس و جوی و پرس و جو از بخش های متنی که بیشترین شباهت را به نمایش برداری برداری آنها دارند. + +

تنظیمات جستجوی برداری

+ +**TopK:** برای فیلتر کردن بخش های متنی که بیشترین شباهت را به پرس و جوی کاربر دارند، استفاده می شود. سیستم به طور پویا تعداد بخش ها را بر اساس اندازه پنجره متن مدل انتخاب شده تنظیم می کند. مقدار پیش فرض 3 است. + +**آستانه امتیاز:** برای تنظیم آستانه شباهت برای فیلتر کردن بخش های متنی استفاده می شود، یعنی فقط بازیابی بخش های متنی که از امتیاز تعیین شده فراتر می روند. پیش فرض سیستم غیرفعال کردن این تنظیم است، به این معنی که مقادیر شباهت بخش های متنی بازیابی شده را فیلتر نمی کند. هنگامی که فعال می شود، مقدار پیش فرض 0.5 است. + +**مدل Rerank:** بعد از پیکربندی کلید API مدل Rerank در صفحه "ارائه دهندگان مدل"، می توانید "مدل Rerank" را در تنظیمات بازیابی فعال کنید. سیستم بعد از بازیابی معنایی، re-ranking معنایی را بر روی نتایج اسناد بازیابی شده انجام می دهد تا نتایج رتبه بندی بهینه سازی شوند. هنگامی که مدل Rerank تنظیم می شود، تنظیمات TopK و آستانه امتیاز فقط در مرحله Rerank اثر دارند. + +### جستجوی متن کامل + +تعریف: شاخص گذاری تمام کلمات در سند، به کاربر اجازه می دهد هر کلمه ای را پرس و جو کند و بخش های متنی حاوی آن کلمات را بازگرداند. + +

تنظیمات جستجوی متن کامل

+ +**TopK:** برای فیلتر کردن بخش های متنی که بیشترین شباهت را به پرس و جوی کاربر دارند، استفاده می شود. سیستم به طور پویا تعداد بخش ها را بر اساس اندازه پنجره متن مدل انتخاب شده تنظیم می کند. مقدار پیش فرض 3 است. + +**مدل Rerank:** بعد از پیکربندی کلید API مدل Rerank در صفحه "ارائه دهندگان مدل"، می توانید "مدل Rerank" را در تنظیمات بازیابی فعال کنید. سیستم بعد از بازیابی متن کامل، re-ranking معنایی را بر روی نتایج اسناد بازیابی شده انجام می دهد تا نتایج رتبه بندی بهینه سازی شوند. هنگامی که مدل Rerank تنظیم می شود، تنظیمات TopK و آستانه امتیاز فقط در مرحله Rerank اثر دارند. + +### جستجوی ترکیبی + +همزمان جستجوی متن کامل و جستجوی برداری را انجام می دهد، یک مرحله re-ranking را برای انتخاب بهترین نتایج تطبیق یافته با پرس و جوی کاربر از هر دو نوع نتایج پرس و جو اعمال می کند. نیازمند پیکربندی API مدل Rerank است. + +

تنظیمات جستجوی ترکیبی

+ +**TopK:** برای فیلتر کردن بخش های متنی که بیشترین شباهت را به پرس و جوی کاربر دارند، استفاده می شود. سیستم به طور پویا تعداد بخش ها را بر اساس اندازه پنجره متن مدل انتخاب شده تنظیم می کند. مقدار پیش فرض 3 است. + +**مدل Rerank:** بعد از پیکربندی کلید API مدل Rerank در صفحه "ارائه دهندگان مدل"، می توانید "مدل Rerank" را در تنظیمات بازیابی فعال کنید. سیستم بعد از بازیابی ترکیبی، re-ranking معنایی را بر روی نتایج اسناد بازیابی شده انجام می دهد تا نتایج رتبه بندی بهینه سازی شوند. هنگامی که مدل Rerank تنظیم می شود، تنظیمات TopK و آستانه امتیاز فقط در مرحله Rerank اثر دارند. + +### تنظیم حالت بازیابی هنگام ایجاد مجموعه داده + +با ورود به صفحه "مجموعه داده -> ایجاد مجموعه داده" و پیکربندی تنظیمات بازیابی، حالت های مختلف بازیابی را تنظیم کنید. + +

تنظیم حالت بازیابی هنگام ایجاد مجموعه داده

+ +### تغییر حالت بازیابی در تنظیمات مجموعه داده + +با ورود به صفحه "مجموعه داده -> انتخاب مجموعه داده -> تنظیمات"، حالت بازیابی یک مجموعه داده موجود را تغییر دهید. + +

تغییر حالت بازیابی در تنظیمات مجموعه داده

+ +### تغییر حالت بازیابی در چیدمان راهنما + +با ورود به صفحه "چیدمان راهنما -> متن -> انتخاب مجموعه داده -> تنظیمات"، حالت بازیابی را هنگام ایجاد یک برنامه تغییر دهید. + +

تغییر حالت بازیابی در چیدمان راهنما

+ + diff --git a/fa/learn-more/extended-reading/retrieval-augment/rerank.md b/fa/learn-more/extended-reading/retrieval-augment/rerank.md new file mode 100644 index 000000000..190c84453 --- /dev/null +++ b/fa/learn-more/extended-reading/retrieval-augment/rerank.md @@ -0,0 +1,50 @@ +# باز رتبه بندی + +### چرا باز رتبه بندی لازم است؟ + +جستجوی ترکیبی می تواند از نقاط قوت فناوری های مختلف بازیابی برای دستیابی به نتایج بازیابی بهتر استفاده کند. با این حال، نتایج جستجو از حالت های مختلف بازیابی نیاز به ادغام و عادی سازی (تبدیل داده ها به یک محدوده یا توزیع استاندارد یکسان برای مقایسه، تحلیل و پردازش بهتر) دارند قبل از اینکه به طور همزمان به مدل بزرگ ارائه شوند. اینجاست که سیستم امتیازدهی وارد عمل می شود: مدل باز رتبه بندی. + +**مدل باز رتبه بندی تطابق معنایی بین لیست اسناد نامزد و پرس و جوی کاربر را محاسبه کرده و آنها را بر اساس تطابق معنایی برای بهبود نتایج مرتب سازی معنایی مرتب می کند.** اصل، محاسبه امتیاز مرتبط بودن بین پرس و جوی کاربر و هر سند نامزد و بازگرداندن لیستی از اسناد مرتب شده بر اساس مرتبط بودن از بالا به پایین است. مدل های رایج باز رتبه بندی شامل Cohere rerank، bge-reranker و غیره می شوند. + +

جستجوی ترکیبی + باز رتبه بندی

+ +در بیشتر موارد، قبل از باز رتبه بندی، یک بازیابی مقدماتی وجود دارد زیرا محاسبه امتیاز مرتبط بودن بین یک پرس و جو و میلیون ها سند بسیار ناکارآمد خواهد بود. بنابراین، **باز رتبه بندی معمولاً در مرحله نهایی فرآیند جستجو قرار می گیرد و برای ادغام و مرتب سازی نتایج از سیستم های مختلف بازیابی ایده آل است.** + +با این حال، باز رتبه بندی فقط برای ادغام نتایج از سیستم های مختلف بازیابی قابل استفاده نیست. حتی در یک حالت بازیابی واحد، معرفی یک مرحله باز رتبه بندی می تواند به طور موثر بازیابی سند را بهبود بخشد. به عنوان مثال، باز رتبه بندی معنایی را می توان پس از بازیابی کلمات کلیدی اضافه کرد. + +در کاربردهای عملی، علاوه بر عادی سازی چندین نتیجه پرس و جو، ما معمولاً تعداد بخش هایی را که به مدل بزرگ منتقل می شوند محدود می کنیم (یعنی TopK که می تواند در پارامترهای مدل باز رتبه بندی تنظیم شود) قبل از تحویل بخش های متنی مرتبط به مدل بزرگ. این به این دلیل است که پنجره ورودی مدل بزرگ دارای محدودیت های اندازه (معمولاً 4K، 8K، 16K، 128K توکن) است. شما باید یک استراتژی تقسیم بندی مناسب و مقدار TopK را بر اساس اندازه پنجره ورودی مدل انتخابی انتخاب کنید. + +مهم است که توجه داشته باشید که حتی اگر پنجره زمینه مدل به اندازه کافی بزرگ باشد، بازیابی بیش از حد بخش ها ممکن است محتوای کمتر مرتبطی را معرفی کند و کیفیت پاسخ را کاهش دهد. بنابراین، پارامتر TopK برای باز رتبه بندی لزوماً هرچه بزرگتر باشد، بهتر نیست. + +باز رتبه بندی جایگزینی برای فناوری جستجو نیست بلکه یک ابزار کمکی برای ارتقا سیستم های بازیابی موجود است. **بزرگترین مزیت آن این است که روشی ساده و کم پیچیدگی برای بهبود نتایج جستجو ارائه می دهد و به کاربران امکان می دهد بدون نیاز به تغییرات قابل توجه در زیرساخت، مرتبط بودن معنایی را در سیستم های جستجوی موجود ادغام کنند.** + +به عنوان مثال، با Cohere Rerank، شما فقط نیاز به ثبت یک حساب کاربری و درخواست صلاحیت استفاده از API دارید. ادغام فقط به دو خط کد نیاز دارد. علاوه بر این، آنها مدل های چند زبانه را ارائه می دهند، به این معنی که شما می توانید نتایج پرس و جو را به طور همزمان در زبان های مختلف مرتب کنید. + +### نحوه پیکربندی مدل باز رتبه بندی؟ + +Dify در حال حاضر از مدل Cohere Rerank پشتیبانی می کند. می توانید وارد صفحه "Model Providers -> Cohere" شده و کلید API را برای مدل باز رتبه بندی پر کنید: + +

پیکربندی مدل Cohere Rerank در Model Providers

+ +### نحوه دریافت مدل Cohere Rerank؟ + +به: [https://cohere.com/rerank](https://cohere.com/rerank) مراجعه کنید، در صفحه ثبت نام کنید و برای واجد شرایط بودن استفاده از مدل Rerank درخواست دهید تا کلید API را دریافت کنید. + +### تنظیم مدل باز رتبه بندی در حالت بازیابی مجموعه داده + +برای اضافه کردن تنظیمات باز رتبه بندی، وارد صفحه "Dataset -> Create Dataset -> Retrieval Settings" شوید. علاوه بر تنظیم مدل باز رتبه بندی هنگام ایجاد مجموعه داده، می توانید پیکربندی باز رتبه بندی را در تنظیمات مجموعه داده موجود و در تنظیمات حالت یادآوری مجموعه داده در تنظیمات برنامه نیز تغییر دهید. + +

تنظیم مدل باز رتبه بندی در حالت بازیابی مجموعه داده

+ +**TopK:** برای تنظیم تعداد اسناد مرتبط بازگردانده شده پس از باز رتبه بندی استفاده می شود. + +**Score Threshold:** برای تنظیم حداقل نمره برای اسناد مرتبط بازگردانده شده پس از باز رتبه بندی استفاده می شود. هنگامی که مدل باز رتبه بندی تنظیم می شود، تنظیمات TopK و Score Threshold فقط در مرحله باز رتبه بندی اعمال می شوند. + +### تنظیم مدل باز رتبه بندی در حالت یادآوری چند مسیر برای مجموعه داده ها + +برای فعال کردن مدل باز رتبه بندی هنگام تنظیم حالت یادآوری چند مسیر، وارد صفحه "Prompt Arrangement -> Context -> Settings" شوید. + +توضیح در مورد حالت یادآوری چند مسیر: 🔗لطفاً بخش [بازیابی چند مسیر](https://docs.dify.ai/guides/knowledge-base/integrate-knowledge-within-application#multi-path-retrieval-recommended) را بررسی کنید. + +

تنظیم مدل باز رتبه بندی در حالت یادآوری چند مسیر برای مجموعه داده ها

+ diff --git a/fa/learn-more/extended-reading/retrieval-augment/retrieval.md b/fa/learn-more/extended-reading/retrieval-augment/retrieval.md new file mode 100644 index 000000000..caf4ef83e --- /dev/null +++ b/fa/learn-more/extended-reading/retrieval-augment/retrieval.md @@ -0,0 +1,17 @@ +# حالت‌های بازیابی + +وقتی کاربران برنامه‌های هوش مصنوعی را با چندین پایگاه دانش می‌سازند، استراتژی بازیابی Dify تعیین می‌کند کدام محتوا بازیابی می‌شود. + +

تنظیمات حالت بازیابی

+ +### تنظیم بازیابی + +با توجه به هدف کاربر، تمام مجموعه‌های داده‌ها را مطابقت می‌دهد، و قطعات متنی مرتبط را همزمان از چندین مجموعه داده بازیابی می‌کند. پس از یک مرحله رتبه‌بندی مجدد، بهترین نتایج مطابق با پرس‌وجوی کاربر از نتایج پرس‌وجوی چند مسیری انتخاب می‌شوند، که نیاز به یک API مدل رتبه‌بندی مجدد پیکربندی شده دارد. در حالت بازیابی چند مسیری، بازیابنده در جستجوی محتوای متنی مرتبط با پرس‌وجوی کاربر در تمام مجموعه‌های داده‌های مرتبط با برنامه است، نتایج سند مرتبط را از بازیابی چند مسیری ادغام می‌کند و اسناد بازیابی شده را به طور معنایی با استفاده از مدل رتبه‌بندی مجدد، رتبه‌بندی مجدد می‌کند. + +در حالت بازیابی چند مسیری، توصیه می‌شود مدل رتبه‌بندی مجدد پیکربندی شود. + +در زیر نمودار جریان فنی برای حالت بازیابی چند مسیری آمده است: + +

بازیابی چند مسیری

+ +از آنجایی که حالت بازیابی چند مسیری به قابلیت استنتاج مدل یا توضیحات مجموعه داده‌ها متکی نیست، می‌تواند هنگام بازیابی از چندین مجموعه داده، نتایج بازیابی با کیفیت بالاتری را به دست آورد. علاوه بر این، ادغام یک مرحله رتبه‌بندی مجدد می‌تواند به طور موثر کارایی بازیابی سند را بهبود بخشد. بنابراین، هنگام ایجاد برنامه‌های Q\&A پایگاه دانش مرتبط با چندین مجموعه داده، توصیه می‌شود حالت بازیابی را به عنوان بازیابی چند مسیری پیکربندی کنید. diff --git a/fa/learn-more/extended-reading/what-is-llmops.md b/fa/learn-more/extended-reading/what-is-llmops.md new file mode 100644 index 000000000..5e7b7920f --- /dev/null +++ b/fa/learn-more/extended-reading/what-is-llmops.md @@ -0,0 +1,40 @@ +# LLMOps چیست؟ + +**LLMOps (عملیات مدل‌های زبانی بزرگ) مجموعه‌ای جامع از روش‌ها و فرایندهایی است که توسعه، استقرار، نگهداری و بهینه‌سازی مدل‌های زبانی بزرگ (مانند سری GPT) را پوشش می‌دهد. هدف LLMOps اطمینان از استفاده کارآمد، مقیاس‌پذیر و امن از این مدل‌های قدرتمند هوش مصنوعی برای ساخت و اجرای برنامه‌های کاربردی دنیای واقعی است. این امر شامل جنبه‌هایی مانند آموزش مدل، استقرار، نظارت، به‌روزرسانی، امنیت و انطباق می‌شود.** + +جدول زیر تفاوت‌های مراحل مختلف توسعه برنامه‌های کاربردی هوش مصنوعی قبل و بعد از استفاده از Dify را نشان می‌دهد: + +| مراحل | قبل | بعد | صرفه‌جویی در زمان | +| ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | --------------- | +| توسعه Front-end & Back-end برای برنامه‌های کاربردی | ادغام و کپسوله‌سازی قابلیت‌های LLM نیاز به زمان زیادی برای توسعه برنامه‌های کاربردی front-end دارد. | مستقیماً از خدمات back-end Dify برای توسعه بر اساس یک scaffold WebApp استفاده کنید. | -80% | +| مهندسی Prompt | فقط با استفاده از APIها یا Playground قابل انجام است. | اشکال‌زدایی بر اساس داده‌های ورودی کاربر. | -25% | +| آماده‌سازی داده‌ها و Embedding | نوشتن کد برای پیاده‌سازی پردازش داده‌های متنی طولانی و Embedding. | آپلود متن یا اتصال منابع داده به پلتفرم. | -80% | +| لاگ‌گیری و تحلیل برنامه‌های کاربردی | نوشتن کد برای ثبت لاگ‌ها و دسترسی به پایگاه‌های داده برای مشاهده آنها. | پلتفرم لاگ‌گیری و تحلیل بلادرنگ ارائه می‌دهد. | -70% | +| تحلیل داده‌ها و Fine-tuning | پرسنل فنی داده‌ها را مدیریت می‌کنند و صف‌های Fine-tuning را ایجاد می‌کنند. | پرسنل غیر فنی می‌توانند به صورت بصری همکاری و مدل را تنظیم کنند. | -60% | +| توسعه و ادغام پلاگین‌های هوش مصنوعی | نوشتن کد برای ایجاد و ادغام پلاگین‌های هوش مصنوعی. | پلتفرم ابزارهای بصری برای ایجاد و ادغام پلاگین‌ها ارائه می‌دهد. | -50% | + + + +قبل از استفاده از یک پلتفرم LLMOps مانند Dify، فرایند توسعه برنامه‌های کاربردی مبتنی بر LLM می‌تواند پیچیده و زمان‌بر باشد. توسعه‌دهندگان باید وظایف مربوط به هر مرحله را به تنهایی انجام دهند که می‌تواند به بی‌کفایتی، دشواری در مقیاس‌پذیری و مسائل امنیتی منجر شود. در اینجا فرایند توسعه قبل از استفاده از یک پلتفرم LLMOps آورده شده است: + +1. آماده‌سازی داده‌ها: به صورت دستی جمع‌آوری و پیش‌پردازش داده‌ها که ممکن است شامل کار پیچیده پاکسازی و حاشیه‌گذاری داده‌ها باشد و نیاز به مقدار قابل‌توجهی کد دارد. +2. مهندسی Prompt: توسعه‌دهندگان فقط می‌توانند Promptها را از طریق تماس‌های API یا Playground بنویسند و اشکال‌زدایی کنند که فاقد بازخورد بلادرنگ و اشکال‌زدایی بصری است. +3. Embedding و مدیریت زمینه: به صورت دستی Embedding و ذخیره سازی زمینه‌های طولانی که می‌تواند برای بهینه‌سازی و مقیاس‌پذیری دشوار باشد و نیاز به مقدار زیادی کار برنامه‌نویسی و آشنایی با Embedding مدل و پایگاه‌های داده برداری دارد. +4. نظارت و نگهداری برنامه: به صورت دستی جمع‌آوری و تجزیه و تحلیل داده‌های عملکرد، احتمالاً قادر به شناسایی و رفع مسائل به صورت بلادرنگ نیست و ممکن است فاقد سوابق لاگ نیز باشد. +5. Fine-tuning مدل: به طور مستقل مدیریت فرایند آماده‌سازی و آموزش داده‌های Fine-tuning که می‌تواند به بی‌کفایتی منجر شود و نیاز به کد بیشتری دارد. +6. سیستم و عملیات: نیاز به مشارکت پرسنل فنی یا هزینه برای توسعه یک back-end مدیریت که هزینه‌های توسعه و نگهداری را افزایش می‌دهد و فاقد پشتیبانی از همکاری و کاربران غیر فنی است. + +با معرفی یک پلتفرم LLMOps مانند Dify، فرایند توسعه برنامه‌های کاربردی مبتنی بر LLM کارآمدتر، مقیاس‌پذیرتر و ایمن‌تر می‌شود. در اینجا مزایای توسعه برنامه‌های کاربردی LLM با استفاده از Dify آورده شده است: + +1. آماده‌سازی داده‌ها: پلتفرم ابزارهای جمع‌آوری و پیش‌پردازش داده‌ها را ارائه می‌دهد، وظایف پاکسازی و حاشیه‌گذاری داده‌ها را ساده‌تر می‌کند و کار کد نویسی را به حداقل می‌رساند یا حتی حذف می‌کند. +2. مهندسی Prompt: ویرایش و اشکال‌زدایی Prompt WYSIWYG، امکان بهینه‌سازی و تنظیمات بلادرنگ بر اساس داده‌های ورودی کاربر را فراهم می‌کند. +3. Embedding و مدیریت زمینه: به صورت خودکار Embedding، ذخیره‌سازی و مدیریت زمینه‌های طولانی را انجام می‌دهد، کارایی و مقیاس‌پذیری را بدون نیاز به کد نویسی گسترده بهبود می‌بخشد. +4. نظارت و نگهداری برنامه: نظارت بلادرنگ بر داده‌های عملکرد، به سرعت مشکلات را شناسایی و رفع می‌کند، عملکرد پایدار برنامه‌ها را تضمین می‌کند و سوابق لاگ کامل را ارائه می‌دهد. +5. Fine-tuning مدل: پلتفرم قابلیت Fine-tuning یک‌کلیکی را بر اساس داده‌های واقعی قبلاً حاشیه‌گذاری شده ارائه می‌دهد، عملکرد مدل را بهبود می‌بخشد و کار کد نویسی را کاهش می‌دهد. +6. سیستم و عملیات: رابط کاربری آسان برای کاربران غیر فنی، پشتیبانی از همکاری بین چندین عضو تیم و کاهش هزینه‌های توسعه و نگهداری. در مقایسه با روش‌های توسعه سنتی، Dify مدیریت برنامه‌های کاربردی شفاف‌تر و آسان‌تر برای نظارت را ارائه می‌دهد که به اعضای تیم اجازه می‌دهد تا عملکرد برنامه را بهتر درک کنند. + + + + علاوه بر این، Dify ویژگی‌های توسعه و ادغام پلاگین هوش مصنوعی را ارائه می‌دهد که به توسعه‌دهندگان امکان می‌دهد به راحتی پلاگین‌های مبتنی بر LLM را برای برنامه‌های کاربردی مختلف ایجاد و مستقر کنند و کارایی توسعه و ارزش برنامه را بیشتر بهبود می‌بخشد. + +**Dify** یک پلتفرم LLMOps آسان برای استفاده است که برای توانمندسازی افراد بیشتر برای ایجاد برنامه‌های کاربردی پایدار و بومی هوش مصنوعی طراحی شده است. Dify با تنظیم بصری برای انواع برنامه‌های کاربردی، برنامه‌های کاربردی آماده استفاده و آماده ارائه را ارائه می‌دهد که می‌توانند به عنوان APIهای Backend-as-a-Service نیز عمل کنند. فرایند توسعه خود را با یک API برای پلاگین‌ها و ادغام دانش یکپارچه کنید و عملیات خود را با استفاده از یک رابط واحد برای مهندسی Prompt، تجزیه و تحلیل بصری و بهبود مداوم ساده کنید. diff --git a/fa/learn-more/faq/README.md b/fa/learn-more/faq/README.md new file mode 100644 index 000000000..34610edc0 --- /dev/null +++ b/fa/learn-more/faq/README.md @@ -0,0 +1,5 @@ +# سوالات متداول (FAQs) + +[سوالات متداول در مورد نصب خود میزبانی / استقرار محلی](https://docs.dify.ai/learn-more/faq/install-faq) + +[سوالات متداول در مورد پیکربندی و استفاده از LLM](https://docs.dify.ai/learn-more/faq/use-llms-faq) diff --git a/fa/learn-more/faq/install-faq.md b/fa/learn-more/faq/install-faq.md new file mode 100644 index 000000000..f94e48b8f --- /dev/null +++ b/fa/learn-more/faq/install-faq.md @@ -0,0 +1,230 @@ +# سوالات متداول در مورد میزبانی خود / استقرار محلی (FAQs) + +### 1. چگونه می توان رمز عبور را پس از مقداردهی اولیه استقرار محلی، در صورت نادرست بودن، ریست کرد؟ + +اگر از Docker Compose برای استقرار استفاده کردید، می توانید با دستور زیر رمز عبور را ریست کنید: + +``` +docker exec -it docker-api-1 flask reset-password +``` + +ایمیل حساب و رمز عبور جدید را دو بار وارد کنید. + +### 2. چگونه می توان خطای "فایل یافت نشد" را در لاگ های استقرار محلی حل کرد؟ + +``` +ERROR:root:Unknown Error in completion +Traceback (most recent call last): + File "/www/wwwroot/dify/dify/api/libs/rsa.py", line 45, in decrypt + private_key = storage.load(filepath) + File "/www/wwwroot/dify/dify/api/extensions/ext_storage.py", line 65, in load + raise FileNotFoundError("File not found") +FileNotFoundError: File not found +``` + +این خطا ممکن است به دلیل تغییر روش استقرار یا حذف دایرکتوری `api/storage/privkeys` رخ دهد. این فایل برای رمزگذاری کلیدهای مدل بزرگ استفاده می شود، بنابراین از دست دادن آن غیرقابل برگشت است. می توانید با دستورات زیر جفت کلید رمزنگاری را ریست کنید: + +* استقرار Docker Compose + + ``` + docker exec -it docker-api-1 flask reset-encrypt-key-pair + ``` +* راه اندازی کد منبع + + به دایرکتوری `api` بروید + + ``` + flask reset-encrypt-key-pair + ``` + + دستورالعمل ها را برای ریست دنبال کنید. + +### 3. بعد از نصب، قادر به ورود نیستم یا بعد از ورود موفقیت آمیز، در رابط های بعدی با خطای 401 مواجه می شوم؟ + +این ممکن است به دلیل تغییر دامنه/URL رخ دهد و باعث ایجاد مشکلات بین سرور و کلاینت می شود. مشکلات تعیین هویت و متقاطع دامنه شامل تنظیمات زیر است: + +1. تنظیمات Cross-Domain CORS + 1. `CONSOLE_CORS_ALLOW_ORIGINS` + + سیاست CORS کنسول، پیش فرض آن `*` است، به این معنی که تمام دامنه ها می توانند دسترسی داشته باشند. + 2. `WEB_API_CORS_ALLOW_ORIGINS` + + سیاست CORS وب اپلیکیشن، پیش فرض آن `*` است، به این معنی که تمام دامنه ها می توانند دسترسی داشته باشند. + +### 4. بعد از راه اندازی، صفحه به طور مداوم در حال بارگیری است و درخواست ها خطای CORS نشان می دهند؟ + +این ممکن است به دلیل تغییر دامنه/URL رخ دهد و باعث ایجاد مشکلات بین سرور و کلاینت می شود. آیتم های پیکربندی زیر را در `docker-compose.yml` به دامنه جدید به روز رسانی کنید: + +`CONSOLE_API_URL:` URL سرور برای API کنسول. +`CONSOLE_WEB_URL:` URL کلاینت برای وب کنسول. +`SERVICE_API_URL:` URL برای API سرویس. +`APP_API_URL:` URL سرور برای API وب اپلیکیشن. +`APP_WEB_URL:` URL برای وب اپلیکیشن. + +برای اطلاعات بیشتر، لطفاً به: [متغیرهای محیطی](../../getting-started/install-self-hosted/environments.md) مراجعه کنید. + +### 5. بعد از استقرار، چگونه نسخه را ارتقا دهیم؟ + +اگر از تصویر شروع کردید، آخرین تصویر را بکشید تا ارتقا تکمیل شود. اگر از کد منبع شروع کردید، آخرین کد را بکشید و سپس آن را راه اندازی کنید تا ارتقا تکمیل شود. + +برای بروزرسانی های استقرار کد منبع، به دایرکتوری `api` بروید و دستور زیر را برای مهاجرت ساختار پایگاه داده به آخرین نسخه اجرا کنید: + +`flask db upgrade` + +### 6. نحوه تنظیم متغیرهای محیطی هنگام وارد کردن با استفاده از Notion + +[**آدرس پیکربندی ادغام Notion**](https://www.notion.so/my-integrations). هنگام انجام استقرار خصوصی، تنظیمات زیر را انجام دهید: + +1. **`NOTION_INTEGRATION_TYPE`**: این مقدار باید به عنوان **public/internal** تنظیم شود. از آنجایی که آدرس مجدد OAuth Notion فقط از https پشتیبانی می کند، از ادغام داخلی Notion برای استقرار محلی استفاده کنید. +2. **`NOTION_CLIENT_SECRET`**: راز مشتری OAuth Notion (برای نوع ادغام عمومی). +3. **`NOTION_CLIENT_ID`**: شناسه مشتری OAuth (برای نوع ادغام عمومی). +4. **`NOTION_INTERNAL_SECRET`**: راز ادغام داخلی Notion. اگر مقدار `NOTION_INTEGRATION_TYPE` **internal** باشد، این متغیر را تنظیم کنید. + +### 7. چگونه می توان نام فضای را در نسخه استقرار محلی تغییر داد؟ + + آن را در جدول `tenants` پایگاه داده تغییر دهید. + +### 8. کجا می توان دامنه را برای دسترسی به برنامه تغییر داد؟ + +دامنه پیکربندی `APP_WEB_URL` را در `docker_compose.yaml` پیدا کنید. + +### 9. در صورت انجام مهاجرت پایگاه داده، چه چیزی را باید بکاپ گرفت؟ + +پایگاه داده، ذخیره سازی تنظیم شده و داده های پایگاه داده وکتوری را بکاپ بگیرید. اگر از Docker Compose برای استقرار استفاده کردید، مستقیماً همه داده ها را در دایرکتوری `dify/docker/volumes` بکاپ بگیرید. + +### 10. چرا Dify استقرار Docker نمی تواند به پورت محلی با استفاده از 127.0.0.1 هنگام راه اندازی OpenLLM به طور محلی دسترسی پیدا کند؟ + +127.0.0.1 آدرس داخلی کانتینر است. آدرس سرور پیکربندی شده Dify باید آدرس شبکه محلی میزبان باشد. + +### 11. چگونه می توان محدودیت اندازه و تعداد آپلود اسناد در مجموعه داده ها برای نسخه استقرار محلی را حل کرد؟ + +برای تنظیم به مستندات متغیرهای محیطی وب سایت رسمی [مستندات متغیرهای محیطی](https://docs.dify.ai/v/zh-hans/getting-started/install-self-hosted/environments) مراجعه کنید. + +### 12. چگونه می توان در نسخه استقرار محلی از طریق ایمیل اعضای جدید دعوت کرد؟ + +در نسخه استقرار محلی، اعضای جدید را از طریق ایمیل دعوت کنید. بعد از وارد کردن ایمیل و ارسال دعوتنامه، صفحه یک لینک دعوت نمایش می دهد. لینک دعوت را کپی کنید و آن را به کاربر ارسال کنید. کاربر می تواند لینک را باز کند، از طریق ایمیل وارد شود، رمز عبور را تنظیم کند و به فضای شما وارد شود. + +### 13. در صورت مواجهه با خطای "Can't load tokenizer for 'gpt2'" در نسخه استقرار محلی چه کاری باید انجام داد؟ + +``` +Can't load tokenizer for 'gpt2'. If you were trying to load it from 'https://huggingface.co/models', make sure you don't have a local directory with the same name. Otherwise, make sure 'gpt2' is the correct path to a directory containing all relevant files for a GPT2TokenizerFast tokenizer. +``` + +برای تنظیم، به مستندات وب سایت رسمی [مستندات متغیرهای محیطی](https://docs.dify.ai/v/zh-hans/getting-started/install-self-hosted/environments) و [ایجاد issue](https://github.com/langgenius/dify/issues/1261) مرتبط مراجعه کنید. + +### 14. چگونه می توان تداخل پورت 80 را در نسخه استقرار محلی حل کرد؟ + +اگر پورت 80 اشغال شده است، سرویس اشغال کننده پورت 80 را متوقف کنید یا نقشه برداری پورت را در `docker-compose.yaml` تغییر دهید تا پورت 80 به پورت دیگری نقشه برداری شود. معمولاً Apache و Nginx این پورت را اشغال می کنند، که می توان با توقف این دو سرویس آن را حل کرد. + +### 15. در صورت مواجهه با خطای "[openai] Error: ffmpeg is not installed" در هنگام تبدیل متن به گفتار چه کاری باید انجام داد؟ + +``` +[openai] Error: ffmpeg is not installed +``` + +از آنجایی که OpenAI TTS بخش بندی جریان صوتی را پیاده سازی می کند، ffmpeg برای کارکرد صحیح استقرار کد منبع باید نصب شود. مراحل جزئی: + +**Windows:** + +1. به [وب سایت رسمی FFmpeg](https://ffmpeg.org/download.html) مراجعه کنید و کتابخانه مشترک Windows پیش کامپایل شده را دانلود کنید. +2. FFmpeg را دانلود کنید و آن را استخراج کنید، که یک پوشه مانند "ffmpeg-20200715-51db0a4-win64-static" ایجاد می کند. +3. پوشه استخراج شده را به مکان دلخواه خود، مثلاً C:\Program Files ، انتقال دهید. +4. مسیر مطلق دایرکتوری bin FFmpeg را به متغیرهای محیطی سیستم اضافه کنید. +5. Command Prompt را باز کنید و "ffmpeg -version" را وارد کنید. اگر اطلاعات نسخه FFmpeg را مشاهده کردید، نصب با موفقیت انجام شده است. + +**Ubuntu:** + +1. Terminal را باز کنید. +2. دستورات زیر را برای نصب FFmpeg وارد کنید: `sudo apt-get update`، سپس `sudo apt-get install ffmpeg`. +3. "ffmpeg -version" را وارد کنید تا بررسی کنید که نصب با موفقیت انجام شده است. + +**CentOS:** + +1. ابتدا ریپوزیتوری EPEL را فعال کنید. در Terminal وارد کنید: `sudo yum install epel-release` +2. سپس وارد کنید: `sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm` +3. بسته های yum را بروزرسانی کنید، وارد کنید: `sudo yum update` +4. در نهایت، FFmpeg را نصب کنید، وارد کنید: `sudo yum install ffmpeg ffmpeg-devel` +5. "ffmpeg -version" را وارد کنید تا بررسی کنید که نصب با موفقیت انجام شده است. + +**Mac OS X:** + +1. Terminal را باز کنید. +2. اگر Homebrew را نصب نکرده اید، می توانید آن را با وارد کردن دستور زیر در Terminal نصب کنید: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` +3. از Homebrew برای نصب FFmpeg استفاده کنید، وارد کنید: `brew install ffmpeg` +4. "ffmpeg -version" را وارد کنید تا بررسی کنید که نصب با موفقیت انجام شده است. + +### 16. چگونه می توان خطای عدم موفقیت نصب فایل پیکربندی Nginx را در هنگام استقرار محلی حل کرد؟ + +``` +Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/run/desktop/mnt/host/d/Documents/docker/nginx/nginx.conf" to rootfs at "/etc/nginx/nginx.conf": mount /run/desktop/mnt/host/d/Documents/docker/nginx/nginx.conf:/etc/nginx/nginx.conf (via /proc/self/fd/9), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type +``` + + پروژه را به طور کامل دانلود کنید، به دایرکتوری docker بروید، و `docker-compose up -d` را اجرا کنید. + +``` +git clone https://github.com/langgenius/dify.git +cd dify/docker +docker compose up -d +``` + +### 17. مهاجرت پایگاه داده وکتوری به Qdrant یا Milvus + +اگر می خواهید پایگاه داده وکتوری را از Weaviate به Qdrant یا Milvus مهاجرت دهید، باید داده ها را در پایگاه داده وکتوری مهاجرت دهید. مراحل به شرح زیر است: + +1. اگر از کد منبع محلی شروع می کنید، متغیرهای محیطی را در فایل `.env` به پایگاه داده وکتوری که می خواهید به آن مهاجرت کنید تغییر دهید. برای مثال: `VECTOR_STORE=qdrant` +2. اگر از docker-compose شروع می کنید، متغیرهای محیطی را در فایل `docker-compose.yaml` به پایگاه داده وکتوری که می خواهید به آن مهاجرت کنید تغییر دهید، هم api و هم worker باید تغییر داده شوند. برای مثال: + +``` +# نوع پایگاه داده وکتوری که باید استفاده شود. ارزش های پشتیبانی شده `weaviate`، `qdrant`، `milvus` هستند. +VECTOR_STORE: weaviate +``` + +3. دستور زیر را اجرا کنید + +``` +flask vdb-migrate # or docker exec -it docker-api-1 flask vdb-migrate +``` + +### 18. چرا SSRF_PROXY لازم است؟ + +در `docker-compose.yaml` نسخه جامعه، ممکن است متوجه شده باشید که برخی سرویس ها با متغیرهای محیطی `SSRF_PROXY` و `HTTP_PROXY` تنظیم شده اند، که همه آن ها به یک کانتینر `ssrf_proxy` اشاره می کنند. این برای جلوگیری از حمله های SSRF است. برای اطلاعات بیشتر در مورد حمله های SSRF، می توانید [این مقاله](https://portswigger.net/web-security/ssrf) را مطالعه کنید. + +برای جلوگیری از خطرات غیرضروری، ما یک پراکسی برای همه سرویس هایی که ممکن است باعث حمله های SSRF شوند تنظیم می کنیم و سرویس هایی مانند Sandbox را مجبور می کنیم که فقط از طریق پراکسی به شبکه های خارجی دسترسی داشته باشند و امنیت داده ها و سرویس شما را تضمین کنیم. به طور پیش فرض، این پراکسی هیچ درخواست محلی را جلوگیری نمی کند، اما می توانید با تغییر فایل پیکربندی `squid`، رفتار پراکسی را سفارشی کنید. + +#### چگونه رفتار پراکسی را سفارشی کنیم؟ + +در `docker/volumes/ssrf_proxy/squid.conf`، می توانید فایل پیکربندی `squid` را پیدا کنید. می توانید رفتار پراکسی را در اینجا سفارشی کنید، مثلاً قوانین ACL را برای محدود کردن دسترسی پراکسی یا اضافه کردن قوانین `http_access` برای محدود کردن دسترسی پراکسی. برای مثال، شبکه محلی شما می تواند به بخش `192.168.101.0/24` دسترسی داشته باشد، اما `192.168.101.19` داده های حساس دارد که نمی خواهید کاربران Dify استقرار محلی به آن دسترسی داشته باشند، اما IP های دیگر می توانند. می توانید قوانین زیر را در `squid.conf` اضافه کنید: + +``` +acl restricted_ip dst 192.168.101.19 +acl localnet src 192.168.101.0/24 + +http_access deny restricted_ip +http_access allow localnet +http_access deny all +``` + +این فقط یک مثال ساده است. می توانید رفتار پراکسی را مطابق نیازهای خود سفارشی کنید. اگر کسب و کار شما پیچیده تر است، مثلاً نیاز به پیکربندی یک پراکسی بالادستی یا کش دارید، می توانید برای اطلاعات بیشتر به [مستندات پیکربندی squid](http://www.squid-cache.org/Doc/config/) مراجعه کنید. + +### 19. چگونه برنامه ایجاد شده را به عنوان یک الگو تنظیم کنیم؟ + +در حال حاضر، تنظیم برنامه ایجاد شده به عنوان الگو پشتیبانی نمی شود. الگوهای موجود توسط Dify رسمی برای کاربران نسخه ابری ارائه شده است تا به آن ها مراجعه کنند. اگر از نسخه ابری استفاده می کنید، می توانید برنامه ها را به فضای کار خود اضافه کنید یا پس از تغییر، آن ها را سفارشی کنید تا الگوهای برنامه خودتان را ایجاد کنید. اگر از نسخه جامعه استفاده می کنید و نیاز به ایجاد الگوهای برنامه بیشتر برای تیم خود دارید، می توانید برای پشتیبانی فنی پرداختنی با تیم کسب و کار ما تماس بگیرید: [business@dify.ai](mailto:business@dify.ai) + +### 20. 502 Bad Gateway + +این به این دلیل است که Nginx سرویس را به مکان اشتباه هدایت می کند. ابتدا اطمینان حاصل کنید که کانتینر در حال اجرا است، سپس دستور زیر را با امتیازات root اجرا کنید: + +``` +docker ps -q | xargs -n 1 docker inspect --format '{{ .Name }}: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' +``` + +این دو خط را در خروجی پیدا کنید: + +``` +/docker-web-1: 172.19.0.5 +/docker-api-1: 172.19.0.7 +``` + +آدرس های IP را به یاد داشته باشید. سپس دایرکتوری را که کد منبع Dify را در آن ذخیره کرده اید، باز کنید، `dify/docker/nginx/conf.d` را باز کنید، `http://api:5001` را با `http://172.19.0.7:5001` و `http://web:3000` را با `http://172.19.0.5:3000` جایگزین کنید، سپس کانتینر Nginx را راه اندازی مجدد کنید یا پیکربندی را بارگذاری مجدد کنید. + +این آدرس های IP _**مثال**_ هستند، شما باید دستور را اجرا کنید تا آدرس های IP خودتان را به دست آورید، آن ها را مستقیماً وارد نکنید. ممکن است نیاز به پیکربندی مجدد آدرس های IP هنگام راه اندازی مجدد کانتینرهای مربوطه داشته باشید. diff --git a/fa/learn-more/faq/use-llms-faq.md b/fa/learn-more/faq/use-llms-faq.md new file mode 100644 index 000000000..79e7e22ee --- /dev/null +++ b/fa/learn-more/faq/use-llms-faq.md @@ -0,0 +1,145 @@ +# پیکربندی و استفاده از LLM + +### 1. چگونه به OpenAI از طریق یک سرور پروکسی در چین دسترسی پیدا کنیم؟ + +Dify از نام دامنه‌های API سفارشی برای OpenAI و هر سرور API مدل بزرگ سازگار با OpenAI پشتیبانی می‌کند. در نسخه جامعه، می‌توانید آدرس سرور هدف را از طریق **تنظیمات --> ارائه دهندگان مدل --> OpenAI --> ویرایش API** وارد کنید. + +### 2. چگونه یک مدل پایه را انتخاب کنیم؟ + +* **gpt-3.5-turbo**: gpt-3.5-turbo نسخه ارتقا یافته‌ای از سری مدل gpt-3 است. این مدل قوی‌تر از gpt-3 است و می‌تواند وظایف پیچیده‌تری را انجام دهد. این مدل پیشرفت‌های قابل توجهی در درک متون طولانی و استدلال متقابل سند دارد. gpt-3.5-turbo می‌تواند متن‌های منسجم‌تر و متقاعدکننده‌تری تولید کند. همچنین این مدل در خلاصه‌سازی، ترجمه و نوشتن خلاقانه به طور قابل توجهی بهبود یافته است. تخصص در: **درک متن طولانی، استدلال متقابل سند، خلاصه‌سازی، ترجمه، نوشتن خلاقانه.** +* **gpt-4**: gpt-4 جدیدترین و قدرتمندترین مدل زبان ترانسفورمری است. این مدل تقریباً 20 میلیارد پارامتر آموزش داده شده دارد که آن را در تمام وظایف زبانی، به ویژه آنهایی که به درک عمیق و تولید پاسخ‌های طولانی و پیچیده نیاز دارند، در سطح بالاتری قرار می‌دهد. gpt-4 می‌تواند همه جنبه‌های زبان انسانی، از جمله درک مفاهیم انتزاعی و استدلال متقابل صفحه را انجام دهد. gpt-4 اولین سیستم درک زبان جهانی است که می‌تواند هر وظیفه پردازش زبان طبیعی را در حوزه هوش مصنوعی انجام دهد. تخصص در: **تمام وظایف NLP، درک زبان، تولید متن طولانی، استدلال متقابل سند، درک مفاهیم انتزاعی.** برای جزئیات بیشتر، به [مستندات](https://platform.openai.com/docs/models/overview) مراجعه کنید. + +### 3. چرا توصیه می‌شود که max_tokens را کوچکتر تنظیم کنیم؟ + +در پردازش زبان طبیعی، خروجی‌های متنی طولانی‌تر معمولاً به زمان محاسبه و منابع بیشتری نیاز دارند. بنابراین، محدود کردن طول متن خروجی می‌تواند تا حدودی هزینه محاسباتی و زمان را کاهش دهد. به عنوان مثال، تنظیم max_tokens=500 به معنی فقط در نظر گرفتن 500 توکن اول از متن خروجی است و هر قسمتی فراتر از این طول دور انداخته خواهد شد. این امر تضمین می‌کند که طول متن خروجی از محدوده قابل قبول LLM تجاوز نمی‌کند و منابع محاسباتی را بهینه می‌کند و راندمان مدل را بهبود می‌بخشد. علاوه بر این، تنظیم max_tokens کوچکتر به شما امکان می‌دهد تا یک prompt طولانی‌تر داشته باشید. به عنوان مثال، gpt-3.5-turbo محدودیت 4097 توکن دارد. اگر max_tokens=4000 باشد، فقط 97 توکن برای prompt باقی می‌ماند و تجاوز به این محدودیت باعث خطا می‌شود. + +### 4. چگونه می‌توانیم متون طولانی در مجموعه داده‌ها را به طور معقولی تقسیم کنیم؟ + +در برخی از کاربردهای پردازش زبان طبیعی، متون معمولاً به صورت پاراگراف یا جمله تقسیم می‌شوند تا اطلاعات معنایی و ساختاری موجود در متن را بهتر مدیریت و درک کنند. کوچکترین واحد تقسیم بندی به وظیفه خاص و پیاده‌سازی فنی بستگی دارد. به عنوان مثال: + +* برای وظایف طبقه‌بندی متن، متون معمولاً به صورت جمله یا پاراگراف تقسیم می‌شوند. +* برای وظایف ترجمه ماشین، کل جملات یا پاراگراف‌ها به عنوان واحدهای تقسیم بندی استفاده می‌شوند. + +در نهایت، آزمایشات و ارزیابی‌ها برای تعیین مناسب‌ترین تکنیک جاسازی و واحد تقسیم بندی مورد نیاز است. می‌توانید عملکرد تکنیک‌ها و واحدهای تقسیم بندی مختلف را در مجموعه داده آزمایشی مقایسه کنید و بهترین راه‌حل را انتخاب کنید. + +### 5. از چه تابع فاصله‌ای برای بخش‌بندی مجموعه داده استفاده می‌کنیم؟ + +ما از [شباهت کسینوسی](https://en.wikipedia.org/wiki/Cosine_similarity) استفاده می‌کنیم. انتخاب تابع فاصله معمولاً بحرانی نیست. جاسازی‌های OpenAI به طول 1 نرمال می‌شوند، به این معنی که: + +استفاده از ضرب نقطه‌ای می‌تواند سرعت محاسبه شباهت کسینوسی را تا حدودی افزایش دهد. + +شباهت کسینوسی و فاصله اقلیدسی به رتبه‌بندی یکسانی منجر می‌شود. + +* اگر بردارهای جاسازی نرمال شده برای محاسبه شباهت کسینوسی یا فاصله اقلیدسی استفاده شوند و بردارها بر اساس این معیارهای شباهت رتبه‌بندی شوند، نتایج رتبه‌بندی یکسان خواهد بود. این به این دلیل است که پس از نرمال شدن، طول بردارها دیگر بر روابط نسبی آن‌ها تأثیر نمی‌گذارد. فقط اطلاعات جهت‌گیری حفظ می‌شود. بنابراین، هنگام استفاده از بردارهای نرمال شده برای اندازه‌گیری شباهت، روش‌های اندازه‌گیری مختلف نتایج رتبه‌بندی یکسانی را به همراه خواهند داشت. پس از نرمال شدن، تمام بردارها به طول 1 مقیاس می‌شوند، به این معنی که همه آن‌ها بر روی طول واحد قرار دارند. بردارهای واحد فقط جهت را بدون اندازه توصیف می‌کنند، زیرا طول آن‌ها همیشه 1 است. _برای اصول خاص، می‌توانید از ChatGPT سوال کنید._ + +هنگامی که بردارهای جاسازی به طول 1 نرمال می‌شوند، محاسبه شباهت کسینوسی بین دو بردار می‌تواند به ضرب نقطه‌ای آن‌ها ساده شود. از آنجا که طول بردارهای نرمال شده همه 1 هستند، نتیجه ضرب نقطه‌ای معادل نتیجه شباهت کسینوسی است. با توجه به اینکه عملیات ضرب نقطه‌ای از سایر معیارهای شباهت (مانند فاصله اقلیدسی) سریع‌تر است، استفاده از بردارهای نرمال شده برای محاسبات ضرب نقطه‌ای می‌تواند تا حدودی راندمان محاسباتی را بهبود بخشد. + +### 6. چگونه می‌توانیم سهمیه‌های آزمایشی رایگان برای مدل‌های Zhipu·AI، iFlytek Spark و MiniMax دریافت کنیم؟ + +ما با ارائه دهندگان مدل اصلی همکاری می‌کنیم تا سهمیه‌های آزمایشی توکن رایگان مشخصی را برای کاربران چینی ارائه دهیم. از طریق Dify **تنظیمات --> ارائه دهندگان مدل --> نمایش بیشتر ارائه دهندگان مدل**، روی "دریافت رایگان" در آیکون‌های Zhipu·AI، iFlytek Spark یا MiniMax کلیک کنید. اگر ورودی را در رابط انگلیسی نمی‌بینید، زبان محصول را به چینی تغییر دهید: + +* **Zhipu·AI: 10 میلیون توکن رایگان دریافت کنید.** روی "دریافت رایگان" کلیک کنید، شماره تلفن و کد تأیید خود را وارد کنید تا سهمیه را دریافت کنید، صرف نظر از اینکه قبلاً در Zhipu·AI ثبت نام کرده‌اید یا خیر. +* **iFlytek Spark (مدل V1.5، مدل V2.0): 6 میلیون توکن رایگان دریافت کنید، 3 میلیون توکن برای هر مدل، سهمیه‌ها قابل تعویض نیستند.** از طریق Dify وارد شوید، ثبت نام را در پلتفرم باز iFlytek Spark تکمیل کنید (فقط برای شماره تلفن‌هایی که قبلاً در iFlytek Spark ثبت نام نکرده‌اند)، به Dify برگردید، 5 دقیقه صبر کنید و صفحه را تازه کنید تا سهمیه موجود را مشاهده کنید. +* **MiniMax: 1 میلیون توکن رایگان دریافت کنید.** روی "دریافت رایگان" کلیک کنید تا سهمیه را بدون ثبت نام دستی دریافت کنید، صرف نظر از اینکه قبلاً در MiniMax ثبت نام کرده‌اید یا خیر. + +پس از اعتبار سهمیه آزمایشی، مدل مورد نیاز خود را در **ترتیب prompt --> مدل و پارامترها --> مدل زبان** انتخاب کنید. + +### 7. هنگام وارد کردن کلید OpenAI، اعتبارسنجی با خطای " اعتبارسنجی ناموفق: شما از سهمیه فعلی خود فراتر رفتید، لطفاً طرح و جزئیات صورت‌حساب خود را بررسی کنید." چه دلیلی دارد؟ + +این نشان می‌دهد که حساب کلید OpenAI شما از اعتبار خالی شده است. لطفاً به OpenAI مراجعه کنید تا شارژ کنید. + +### 8. هنگام استفاده از کلید OpenAI برای مکالمه در برنامه، با خطاهای زیر مواجه شدم. چه دلیلی دارد؟ + +خطای اول: + +```JSON +سرور با خطای داخلی مواجه شد و نتوانست درخواست شما را کامل کند. یا سرور بیش از حد بارگذاری شده است یا خطایی در برنامه وجود دارد +``` + +خطای دوم: + +```JSON +حداکثر نرخ برای default-gpt-3.5-turbo در سازمان org-wDrZCxxxxxxxxxissoZb در درخواست‌های در دقیقه فراتر رفت. حد: 3 / دقیقه. لطفاً بعد از 20 ثانیه دوباره تلاش کنید. اگر همچنان با مشکل مواجه شدید، از طریق مرکز راهنما در help.openai.com با ما تماس بگیرید. لطفاً برای افزایش محدودیت نرخ، روش پرداخت را به حساب خود اضافه کنید. برای اضافه کردن روش پرداخت به https://platform.openai.com/account/billing مراجعه کنید. +``` + +لطفاً بررسی کنید که آیا به حداکثر نرخ تماس API رسمی رسیده‌اید یا خیر. برای جزئیات بیشتر به [مستندات رسمی OpenAI](https://platform.openai.com/docs/guides/rate-limits) مراجعه کنید. + +### 9. پس از استقرار خودکار توسط کاربر، Zhichat در دسترس نیست و خطا به شرح زیر است: "آرگومان درخواست نامعتبر ارائه شده است: functions." چگونه می‌توان این مشکل را حل کرد؟ + +اول، بررسی کنید که آیا نسخه‌های سمت جلو و سمت عقب جدیدترین و سازگار هستند یا خیر. دوم، این خطا ممکن است به این دلیل رخ دهد که شما از یک کلید Azure OpenAI استفاده می‌کنید اما مدل را با موفقیت مستقر نکرده‌اید. بررسی کنید که آیا مدل در Azure OpenAI شما مستقر شده است یا خیر. نسخه مدل gpt-3.5-turbo باید 0613 یا بالاتر باشد (از آنجا که نسخه‌های قبل از 0613 از قابلیت تماس تابعی که توسط Zhichat استفاده می‌شود پشتیبانی نمی‌کنند، و این امر آن را غیرقابل استفاده می‌کند). + +### 10. هنگام تنظیم کلید OpenAI، خطای زیر نمایش داده می‌شود. چه دلیلی دارد؟ + +```JSON +خطا در ارتباط با OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): حداکثر تلاش مجدد فراتر رفت با url: /v1/chat/completions (Caused by NewConnectionError(; نتوانست یک اتصال جدید ایجاد کند: [Errno -3] خطای موقت در حل نام')) +``` + +معمولاً این به دلیل تنظیم پروکسی در محیط شما است. لطفاً بررسی کنید که آیا پروکسی تنظیم شده است یا خیر. + +### 11. هنگام تعویض مدل‌ها در برنامه، با خطای زیر مواجه شدم. چگونه می‌توان این مشکل را حل کرد؟ + +```JSON +Anthropic: کد خطا: 400 - 'error': 'type': "خطای درخواست نامعتبر، 'message': 'temperature: range: -1 or 0..1) +``` + +هر مدل دارای مقادیر پارامتر متفاوتی است. مقادیر پارامتر را با توجه به محدوده مدل فعلی تنظیم کنید. + +### 12. با خطای زیر مواجه شدم. چگونه می‌توان این مشکل را حل کرد؟ + +```JSON +پرس و جو یا prompt پیشوند خیلی طولانی است، می‌توانید prompt پیشوند را کاهش دهید، یا max token را کاهش دهید، یا به یک LLM با محدودیت توکن بزرگتر سوئیچ کنید +``` + +در تنظیمات پارامترها در صفحه تنظیمات، مقدار "max token" را کاهش دهید. + +### 13. مدل پیش‌فرض در Dify چیست و آیا می‌توان از مدل‌های منبع باز استفاده کرد؟ + +مدل پیش‌فرض را می‌توان در **تنظیمات - ارائه دهندگان مدل** پیکربندی کرد. در حال حاضر، از مدل‌های تولید متن از ارائه دهندگان مانند OpenAI / Azure OpenAI / Anthropic پشتیبانی می‌کند و همچنین از ادغام مدل‌های منبع باز میزبانی شده در Hugging Face / Replicate / xinference پشتیبانی می‌کند. + +### 14. در نسخه جامعه، چرا **حالت بخش‌بندی Q&A** مجموعه داده به طور مداوم "در صف انتظار" نمایش داده می‌شود؟ + +بررسی کنید که آیا کلید API مدل جاسازی که در حال استفاده از آن هستید به حداکثر نرخ رسیده‌ است یا خیر. + +### 15. هنگامی که کاربران در حین استفاده از برنامه با خطای "توکن نامعتبر" مواجه می‌شوند، چگونه می‌توان این مشکل را حل کرد؟ + +اگر با خطای "توکن نامعتبر" مواجه شدید، راه‌حل‌های زیر را امتحان کنید: + +* حافظه پنهان مرورگر را پاک کنید (کوکی‌ها، ذخیره‌سازی جلسه و ذخیره‌سازی محلی). اگر از یک برنامه تلفن همراه استفاده می‌کنید، حافظه پنهان برنامه مربوطه را پاک کنید و دوباره به آن دسترسی پیدا کنید. +* یک URL برنامه جدید ایجاد کنید و دوباره URL را وارد کنید. + +### 16. محدودیت‌های اندازه برای آپلود اسناد مجموعه داده چیست؟ + +در حال حاضر، حداکثر اندازه برای آپلود یک سند واحد 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. هنگام آپلود اسناد مجموعه داده در اکسل، چگونه می‌توانیم آن‌ها را بهتر بخش‌بندی کنیم؟ + +عنوان را در ردیف اول تنظیم کنید و محتوا را در هر ردیف بعدی بدون تنظیمات عنوان اضافی یا قالب‌های جدول پیچیده نمایش دهید. + +به عنوان مثال، در جدول زیر، فقط عنوان ردیف دوم را حفظ کنید. ردیف اول (جدول 1) یک عنوان اضافی است و باید حذف شود. + +### 20. چرا حتی با خرید ChatGPT Plus، نمی‌توانم از GPT-4 در Dify استفاده کنم؟ + +API مدل GPT-4 OpenAI و ChatGPT Plus دو محصول جداگانه با هزینه‌های جداگانه هستند. API مدل دارای قیمت‌گذاری جداگانه‌ای است. به [مستندات قیمت‌گذاری OpenAI](https://openai.com/pricing) مراجعه کنید. برای درخواست دسترسی پرداخت شده، ابتدا باید یک کارت را به آن متصل کنید. اتصال کارت دسترسی به GPT-3.5 را می‌دهد اما دسترسی به GPT-4 را نمی‌دهد. دسترسی به GPT-4 به صورتحساب پرداخت شده نیاز دارد. برای جزئیات بیشتر به [مستندات رسمی OpenAI](https://platform.openai.com/account/billing/overview) مراجعه کنید. + +### 21. چگونه می‌توانم مدل‌های جاسازی دیگر را اضافه کنم؟ + +Dify از موارد زیر برای استفاده به عنوان مدل‌های جاسازی پشتیبانی می‌کند. فقط کافی است نوع `Embeddings` را در کادر تنظیمات انتخاب کنید. + +* Azure +* LocalAI +* MiniMax +* OpenAI +* Replicate +* XInference + +### 22. چگونه می‌توانم یک برنامه‌ای که ایجاد کرده‌ام را به عنوان یک الگوی برنامه تنظیم کنم؟ + +این ویژگی الگوهای برنامه را برای کاربران نسخه ابری فراهم می‌کند تا به آن‌ها مراجعه کنند و در حال حاضر از تنظیم برنامه‌های ایجاد شده شما به عنوان الگو پشتیبانی نمی‌کند. اگر از نسخه ابری استفاده می‌کنید، می‌توانید **به Workspace اضافه کنید** یا **سفارشی‌سازی کنید** تا به برنامه خود تبدیل شود. اگر از نسخه جامعه استفاده می‌کنید و نیاز به ایجاد الگوهای برنامه بیشتر برای تیم خود دارید، می‌توانید برای پشتیبانی فنی پرداخت شده با تیم تجاری ما تماس بگیرید: `business@dify.ai`. diff --git a/fa/learn-more/how-to-use-json-schema-in-dify.md b/fa/learn-more/how-to-use-json-schema-in-dify.md new file mode 100644 index 000000000..1d9984b7e --- /dev/null +++ b/fa/learn-more/how-to-use-json-schema-in-dify.md @@ -0,0 +1,236 @@ +# نحوه استفاده از خروجی JSON Schema در Dify + +JSON Schema یک مشخصات برای توصیف ساختار داده‌های JSON است. توسعه‌دهندگان می‌توانند ساختارهای JSON Schema را برای تعیین اینکه خروجی‌های LLM دقیقاً از داده‌ها یا محتواهای تعریف‌شده پیروی می‌کنند، تعریف کنند، مانند تولید ساختارهای شفاف سند یا کد. + +## مدل‌هایی که از قابلیت JSON Schema پشتیبانی می‌کنند + +- `gpt-4o-mini-2024-07-18` و نسخه‌های بعد از آن +- `gpt-4o-2024-08-06` و نسخه‌های بعد از آن + +> برای اطلاعات بیشتر در مورد قابلیت‌های خروجی ساخت‌یافته مدل‌های سری OpenAI، لطفاً به [خروجی‌های ساخت‌یافته](https://platform.openai.com/docs/guides/structured-outputs/introduction) مراجعه کنید. + +## نحوه استفاده از خروجی‌های ساخت‌یافته + +1. LLM را به ابزارها، توابع، داده‌ها و سایر اجزای موجود در سیستم متصل کنید. `strict: true` را در تعریف تابع تنظیم کنید. هنگامی که فعال است، ویژگی خروجی‌های ساخت‌یافته تضمین می‌کند که پارامترهای تولید شده توسط LLM برای فراخوانی‌های تابع دقیقاً با JSON Schema که در تعریف تابع ارائه کرده‌اید مطابقت دارند. + +2. هنگامی که LLM به کاربران پاسخ می‌دهد، محتوا را در قالبی ساخت‌یافته مطابق با تعاریف موجود در JSON Schema خروجی می‌دهد. + +## فعال‌سازی JSON Schema در Dify + +LLM در برنامه خود را به یکی از مدل‌های پشتیبانی کننده خروجی JSON Schema که در بالا ذکر شد، تغییر دهید. سپس، در فرم تنظیمات، `JSON Schema` را فعال کنید و الگوی JSON Schema را پر کنید. همزمان، ستون `response_format` را فعال کنید و آن را به فرمت `json_schema` تغییر دهید. + +![](../../../img/learn-more-json-schema.png) + +محتوای تولید شده توسط LLM از خروجی در قالب‌های زیر پشتیبانی می‌کند: + +- **متن:** خروجی در قالب متن + +## تعریف الگوهای JSON Schema + +می‌توانید به فرمت JSON Schema زیر مراجعه کنید تا محتوای الگوی خود را تعریف کنید: + +```json +{ + "name": "template_schema", + "description": "یک الگوی عمومی برای JSON Schema", + "strict": true, + "schema": { + "type": "object", + "properties": { + "field1": { + "type": "string", + "description": "شرح فیلد 1" + }, + "field2": { + "type": "number", + "description": "شرح فیلد 2" + }, + "field3": { + "type": "array", + "description": "شرح فیلد 3", + "items": { + "type": "string" + } + }, + "field4": { + "type": "object", + "description": "شرح فیلد 4", + "properties": { + "subfield1": { + "type": "string", + "description": "شرح زیر فیلد 1" + } + }, + "required": ["subfield1"], + "additionalProperties": false + } + }, + "required": ["field1", "field2", "field3", "field4"], + "additionalProperties": false + } +} +``` + + +راهنمای گام به گام: + +1. اطلاعات پایه را تعریف کنید: + - `name` را تنظیم کنید: نامی توصیفی برای طرح خود انتخاب کنید. + - `description` را اضافه کنید: هدف طرح را به طور خلاصه توضیح دهید. + - `strict` را روی true تنظیم کنید: برای اطمینان از حالت دقیق. + +2. شیء `schema` را ایجاد کنید: + - `type: "object"` را برای تعیین سطح ریشه به عنوان یک نوع شیء تنظیم کنید. + - یک شیء `properties` برای تعریف همه فیلدها اضافه کنید. + +3. فیلدها را تعریف کنید: + - برای هر فیلد یک شیء ایجاد کنید، از جمله `type` و `description`. + - انواع رایج: `string`, `number`, `boolean`, `array`, `object`. + - برای آرایه‌ها، از `items` برای تعریف انواع عنصر استفاده کنید. + - برای اشیاء، `properties` را به صورت بازگشتی تعریف کنید. + +4. محدودیت‌ها را تنظیم کنید: + - یک آرایه `required` در هر سطح اضافه کنید، که تمام فیلدهای مورد نیاز را فهرست می‌کند. + - `additionalProperties: false` را در هر سطح شیء تنظیم کنید. + +5. فیلدهای ویژه را اداره کنید: + - از `enum` برای محدود کردن مقادیر اختیاری استفاده کنید. + - از `$ref` برای پیاده‌سازی ساختارهای بازگشتی استفاده کنید. + +## مثال + +### 1. زنجیره تفکر (روال) + +**مثال JSON Schema** + +```json +{ + "name": "math_reasoning", + "description": "مراحل و پاسخ نهایی را برای استدلال ریاضی ثبت می‌کند", + "strict": true, + "schema": { + "type": "object", + "properties": { + "steps": { + "type": "array", + "description": "آرایه‌ای از مراحل استدلال", + "items": { + "type": "object", + "properties": { + "explanation": { + "type": "string", + "description": "توضیح مرحله استدلال" + }, + "output": { + "type": "string", + "description": "خروجی مرحله استدلال" + } + }, + "required": ["explanation", "output"], + "additionalProperties": false + } + }, + "final_answer": { + "type": "string", + "description": "پاسخ نهایی به مسئله ریاضی" + } + }, + "additionalProperties": false, + "required": ["steps", "final_answer"] + } +} +``` + +**دستورات** + +```text +شما یک معلم خصوصی ریاضی مفید هستید. یک مسئله ریاضی به شما ارائه خواهد شد، +و هدف شما خروجی یک راه حل گام به گام، همراه با یک پاسخ نهایی است. +برای هر مرحله، فقط خروجی را به عنوان یک معادله ارائه دهید و از فیلد explanation برای شرح استدلال استفاده کنید. +``` + +### تولید UI (حالت بازگشتی ریشه) + +**مثال JSON Schema** + +```json +{ + "name": "ui", + "description": "UI به صورت پویا تولید شده", + "strict": true, + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "نوع مؤلفه UI", + "enum": ["div", "button", "header", "section", "field", "form"] + }, + "label": { + "type": "string", + "description": "برچسب مؤلفه UI، که برای دکمه‌ها یا فیلدهای فرم استفاده می‌شود" + }, + "children": { + "type": "array", + "description": "مؤلفه‌های UI تو در تو", + "items": { + "$ref": "#" + } + }, + "attributes": { + "type": "array", + "description": "صفات دلخواه برای مؤلفه UI، مناسب برای هر عنصر", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "نام صفت، به عنوان مثال onClick یا className" + }, + "value": { + "type": "string", + "description": "مقدار صفت" + } + }, + "additionalProperties": false, + "required": ["name", "value"] + } + } + }, + "required": ["type", "label", "children", "attributes"], + "additionalProperties": false + } + } +``` + +**دستورات** + +```text +شما یک AI تولید کننده UI هستید. ورودی کاربر را به یک UI تبدیل کنید. +``` + +**مثال خروجی:** + +![](../../img/best-practice-json-schema-ui-example.png) + +## نکات + +- اطمینان حاصل کنید که دستورالعمل برنامه شامل دستورالعمل‌های نحوه برخورد با مواردی است که ورودی کاربر نمی‌تواند پاسخ معتبر تولید کند. + +- مدل همیشه تلاش می‌کند از طرح ارائه شده پیروی کند. اگر محتوای ورودی کاملاً بی ارتباط با طرح مشخص شده باشد، ممکن است باعث تولید توهم در LLM شود. + +- اگر LLM تشخیص دهد که ورودی با کار ناسازگار است، می‌توانید در دستورالعمل، زبان مشخصی را برای تعیین بازگرداندن پارامترهای خالی یا جملات خاص بگنجانید. + +- همه فیلدها باید `required` باشند، برای جزئیات، لطفاً به [طرح‌های پشتیبانی شده](https://platform.openai.com/docs/guides/structured-outputs/supported-schemas) مراجعه کنید. + +- [additionalProperties: false](https://platform.openai.com/docs/guides/structured-outputs/additionalproperties-false-must-always-be-set-in-objects) باید همیشه در اشیاء تنظیم شود. + +- شیء سطح ریشه طرح باید یک شیء باشد. + +## پیوست + +- [مقدمه‌ای بر خروجی‌های ساخت‌یافته](https://cookbook.openai.com/examples/structured_outputs_intro) + +- [خروجی ساخت‌یافته](https://platform.openai.com/docs/guides/structured-outputs/json-mode?context=without_parse) + + diff --git a/fa/learn-more/prompt-engineering/README.md b/fa/learn-more/prompt-engineering/README.md new file mode 100644 index 000000000..58b55e992 --- /dev/null +++ b/fa/learn-more/prompt-engineering/README.md @@ -0,0 +1,29 @@ +# طراحی درخواست‌ها و رهبری برنامه‌های کاربردی + +نحوه استفاده از Dify برای رهبری برنامه‌های کاربردی و تمرین مهندسی درخواست را بیاموزید. با استفاده از دو نوع برنامه کاربردی داخلی، می‌توانید برنامه‌های کاربردی AI با ارزش بالا بسازید. + +فلسفه اصلی Dify، تعریف اعلامی برنامه‌های کاربردی AI است. همه چیز، از جمله درخواست‌ها، زمینه و پلاگین‌ها، را می‌توان از طریق یک فایل YAML (از این رو نام Dify) توصیف کرد. خروجی نهایی یک API واحد یا یک WebApp آماده استفاده است. + +در عین حال، Dify رابطی آسان برای استفاده در رهبری درخواست ارائه می‌دهد که به توسعه‌دهندگان اجازه می‌دهد تا به صورت بصری ویژگی‌های مختلف برنامه کاربردی را بر اساس درخواست‌ها رهبری کنند. ساده به نظر می‌رسد، اینطور نیست؟ + +چه برنامه کاربردی AI ساده باشد یا پیچیده، یک درخواست خوب می‌تواند به طور موثر کیفیت خروجی مدل را بهبود بخشد، میزان خطا را کاهش دهد و نیازهای سناریوهای خاص را برآورده کند. Dify در حال حاضر دو نوع برنامه کاربردی رایج را ارائه می‌دهد: گفتگو محور و تولید متن. این فصل شما را در رهبری برنامه‌های کاربردی AI به صورت بصری راهنمایی می‌کند. + +### مراحل رهبری برنامه کاربردی + +1. تعیین سناریو برنامه و نیازهای عملکردی +2. طراحی و تست درخواست‌ها و پارامترهای مدل +3. رهبری درخواست‌ها با ورودی کاربر +4. انتشار برنامه +5. مشاهده و تکرار مداوم + +### درک تفاوت بین انواع برنامه کاربردی + +برنامه‌های کاربردی تولید متن و برنامه‌های کاربردی گفتگو محور در Dify، تفاوت‌های جزئی در رهبری درخواست دارند. برنامه‌های کاربردی گفتگو محور باید "چرخه زندگی گفتگو" را برای برآوردن سناریوهای پیچیده‌تر کاربر و نیازهای مدیریت زمینه ادغام کنند. + +مهندسی درخواست به یک زمینه امیدوارکننده تبدیل شده است که ارزش کاوش مداوم را دارد. برای یادگیری دستورالعمل‌های رهبری برای دو نوع برنامه کاربردی به خواندن ادامه دهید. + +### خواندن بیشتر + +1. [یادگیری درخواست](https://learnprompting.org/zh-Hans/) +2. [مهندسی درخواست ChatGPT برای توسعه‌دهندگان](https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/) +3. [درخواست‌های عالی ChatGPT](https://github.com/f/awesome-chatgpt-prompts) diff --git a/fa/learn-more/prompt-engineering/prompt-engineering-1/README.md b/fa/learn-more/prompt-engineering/prompt-engineering-1/README.md new file mode 100644 index 000000000..55c8bd9bf --- /dev/null +++ b/fa/learn-more/prompt-engineering/prompt-engineering-1/README.md @@ -0,0 +1,174 @@ +# حالت حرفه‌ای برای مهندسی اعلان (متوقف شده) + +هنگام ایجاد یک برنامه در Dify، حالت تنظیم پیش‌فرض **حالت ساده** است که برای کاربران غیر فنی که می‌خواهند به سرعت برنامه‌هایی مانند یک ربات چت پایگاه دانش شرکت یا یک خلاصه ساز مقاله ایجاد کنند، ایده‌آل است. با استفاده از **حالت ساده**، می‌توانید عبارات پیش‌اعلان را تنظیم کنید، متغیرها و زمینه را با مراحل ساده اضافه کنید تا یک برنامه کامل را منتشر کنید (به 👉[conversation-application.md](../../../../guides/application_orchestrate/conversation-application.md "mention")) مراجعه کنید. + +با این حال، اگر شما یک کاربر فنی هستید که در استفاده از **OpenAI's** **Playground** مهارت دارید و می‌خواهید یک برنامه آموزگار ایجاد کنید که برای ماژول‌های مختلف آموزشی نیاز به جاسازی زمینه‌ها و متغیرهای مختلف در اعلان‌ها دارد، می‌توانید **حالت حرفه‌ای** را انتخاب کنید. در این حالت، می‌توانید آزادانه اعلان‌های کامل را بنویسید، از جمله اصلاح اعلان‌های داخلی، تنظیم موقعیت زمینه و تاریخچه چت در اعلان‌ها و تنظیم پارامترهای لازم. اگر با هر دو مدل چت و تکمیل متن آشنا هستید، **حالت حرفه‌ای** به شما امکان می‌دهد تا به سرعت بین این مدل‌ها برای رفع نیازهای خود جابجا شوید، و هر دو برای برنامه‌های مکالمه‌ای و تولید متن مناسب هستند. + +قبل از شروع آزمایش با حالت جدید، باید عناصر ضروری **حالت حرفه‌ای** را بدانید: + +* **مدل تکمیل متن** ![](../../../../.gitbook/assets/screenshot-20231017-092613.png) + + هنگام انتخاب یک مدل، نامی که در سمت راست آن COMPLETE وجود دارد، یک مدل تکمیل متن است. این مدل یک رشته متن آزاد به نام "اعلان" را می‌پذیرد و یک تکمیل متن را تولید می‌کند که سعی می‌کند با هر زمینه یا الگویی که به آن می‌دهید مطابقت کند. به عنوان مثال، اگر اعلان شما این است: "همانطور که دکارت گفت، من فکر می‌کنم، پس"، احتمالاً "من هستم" را به عنوان تکمیل برمی‌گرداند. +* **مدل چت** + + هنگام انتخاب یک مدل، نامی که در سمت راست آن CHAT وجود دارد، یک مدل چت است. این مدل لیستی از پیام‌ها را به عنوان ورودی می‌پذیرد و یک پیام تولید شده را به عنوان خروجی برمی‌گرداند. اگرچه فرمت چت برای ساده سازی مکالمات چند دوره‌ای طراحی شده است، اما برای وظایف تک دوره‌ای بدون هیچ مکالمه‌ای نیز مفید است. مدل‌های چت از پیام‌های چت به عنوان ورودی و خروجی استفاده می‌کنند، از جمله سه نوع پیام: SYSTEM، USER و ASSISTANT: + + * `SYSTEM` + * پیام‌های سیستم به تنظیم رفتار دستیار هوش مصنوعی کمک می‌کنند. به عنوان مثال، می‌توانید شخصیت دستیار هوش مصنوعی را اصلاح کنید یا دستورالعمل‌های خاصی را در مورد چگونگی رفتار آن در طول مکالمه ارائه دهید. پیام‌های سیستم اختیاری هستند و رفتار مدل بدون پیام‌های سیستم ممکن است شبیه استفاده از یک پیام عمومی مانند "شما یک دستیار مفید هستید" باشد. + * `USER` + * پیام‌های کاربر درخواست‌ها یا نظرات را برای پاسخ دستیار هوش مصنوعی ارائه می‌دهند. + * `ASSISTANT` + * پیام‌های دستیار پاسخ‌های قبلی دستیار را ذخیره می‌کنند، اما می‌توانند توسط شما نیز برای ارائه نمونه‌هایی از رفتار مورد نظر نوشته شوند. +* **توالی‌های توقف** + + اینها کلمات، عبارات یا کاراکترهای خاص هستند که برای علامت دادن به LLM برای توقف تولید متن استفاده می‌شوند. +* **بلوک‌های محتوا در اعلان‌های حالت حرفه‌ای** + * + + در یک برنامه که با یک مجموعه داده تنظیم شده است، کاربر یک پرس‌وجو را وارد می‌کند و برنامه از این پرس‌وجو به عنوان یک شرط بازیابی برای مجموعه داده استفاده می‌کند. نتایج بازیابی شده سازماندهی می‌شوند و متغیر `context` را جایگزین می‌کنند، به LLM اجازه می‌دهند تا به محتوای زمینه برای ارائه پاسخ مراجعه کند. + * + + محتوای پرس‌وجو فقط در مدل‌های تکمیل متن برای برنامه‌های مکالمه‌ای در دسترس است. محتوای وارد شده توسط کاربر در مکالمه این متغیر را جایگزین می‌کند و یک دور جدید از گفتگو را آغاز می‌کند. + * + + تاریخچه مکالمه فقط در مدل‌های تکمیل متن برای برنامه‌های مکالمه‌ای در دسترس است. در طول مکالمات متعدد در یک برنامه مکالمه‌ای، Dify سوابق مکالمه تاریخی را با توجه به قوانین داخلی مونتاژ و زنجیر می‌کند و متغیر `conversation history` را جایگزین می‌کند. پیشوندهای Human و Assistant را می‌توان با کلیک بر روی `...` بعد از `conversation history` اصلاح کرد. +* **قالب اولیه** + + در **حالت حرفه‌ای**، قبل از تنظیم رسمی، کادر اعلان یک قالب اولیه ارائه می‌دهد که می‌توانید مستقیماً آن را برای ارائه درخواست‌های سفارشی‌تر به LLM تغییر دهید. توجه داشته باشید: تفاوت‌هایی بر اساس نوع برنامه و حالت وجود دارد. + + برای جزئیات بیشتر، لطفا به 👉[prompt-engineering-template.md](prompt-engineering-template.md "mention") مراجعه کنید. + +## مقایسه دو حالت + +| بعد مقایسه | حالت ساده | حالت حرفه‌ای | +|----------------------|-------------|-------------| +| دیده‌شدن اعلان داخلی | محصور و نامرئی | باز و قابل مشاهده | +| تنظیم خودکار | در دسترس | در دسترس نیست | +| تفاوت در انتخاب مدل تکمیل متن و چت | هیچ | تنظیمات متفاوت بعد از انتخاب مدل تکمیل متن و چت | +| درج متغیر | در دسترس | در دسترس | +| تأیید بلوک‌های محتوا | هیچ | در دسترس | +| تنظیم نوع پیام SYSTEM / USER / ASSISTANT | هیچ | در دسترس | +| تنظیمات پارامترهای زمینه | قابل تنظیم | قابل تنظیم | +| مشاهده PROMPT LOG | مشاهده کامل لاگ اعلان | مشاهده کامل لاگ اعلان | +| تنظیمات پارامترهای توالی‌های توقف | هیچ | قابل تنظیم | + +## دستورالعمل‌های عملیاتی + +### 1. نحوه ورود به حالت حرفه‌ای + +بعد از ایجاد یک برنامه، می‌توانید در صفحه تنظیم اعلان به **حالت حرفه‌ای** تغییر وضعیت دهید، جایی که می‌توانید اعلان‌های کامل برنامه را ویرایش کنید. + +

ورود به حالت حرفه‌ای

+ +{% hint style="warning" %} +بعد از تغییر اعلان‌ها و انتشار برنامه در **حالت حرفه‌ای**، نمی‌توانید به **حالت ساده** برگردید. +{% endhint %} + +### 2. تغییر پارامترهای زمینه درج شده + +در هر دو **حالت ساده** و **حالت حرفه‌ای**، می‌توانید پارامترهای زمینه درج شده را شامل **TopK** و **Score Threshold** را تغییر دهید. + +{% hint style="warning" %} +توجه داشته باشید که اعلان داخلی حاوی \{{#context#\}} فقط بعد از آپلود زمینه در **حالت حرفه‌ای** نمایش داده می‌شود. +{% endhint %} + +

تنظیمات پارامترهای زمینه

+ +**TopK: محدوده مقدار یک عدد صحیح از 1 تا 10 است** + +برای فیلتر کردن قطعات متن با بیشترین شباهت به پرس‌وجوی کاربر استفاده می‌شود. سیستم تعداد قطعات را بر اساس اندازه پنجره زمینه مدل انتخاب شده به طور پویا تنظیم می‌کند. مقدار پیش‌فرض 2 است. توصیه می‌شود این مقدار را بین 2 و 5 تنظیم کنید، زیرا انتظار داریم پاسخ‌هایی را دریافت کنیم که بیشتر با زمینه جاسازی شده مطابقت دارند. + +**Score Threshold: محدوده مقدار یک عدد اعشاری با دو رقم اعشار از 0 تا 1 است** + +برای تنظیم آستانه شباهت برای فیلتر کردن قطعات متن استفاده می‌شود، یعنی فقط یادآوری قطعات متنی که از نمره تنظیم شده فراتر می‌روند (می‌توانید نمره اصابت هر قطعه را در "Hit Test" مشاهده کنید). سیستم به طور پیش‌فرض این تنظیم را خاموش می‌کند، به این معنی که قطعات متن یادآوری شده را بر اساس مقدار شباهت فیلتر نمی‌کند. هنگام روشن بودن، مقدار پیش‌فرض 0.7 است. توصیه می‌شود این تنظیم را به طور پیش‌فرض خاموش نگه دارید، اما اگر به پاسخ‌های دقیق‌تر نیاز دارید، می‌توانید یک مقدار بالاتر را تنظیم کنید (حداکثر مقدار 1 است، اما توصیه نمی‌شود که آن را خیلی بالا تنظیم کنید). + +### 3. تنظیم **توالی‌های توقف** + +ما نمی‌خواهیم LLM محتوای غیرضروری را تولید کند، بنابراین کلمات، عبارات یا کاراکترهای خاص (تنظیم پیش‌فرض `Human:`) باید تنظیم شوند تا به LLM اطلاع دهند که تولید متن را متوقف کند. + +به عنوان مثال، اگر یک اعلان _Few-Shot_ می‌نویسید: + +``` +Human1: رنگ آسمان چیست؟ +Assistant1: آسمان آبی است. +Human1: رنگ آتش چیست؟ +Assistant1: آتش قرمز است. +Human1: رنگ خاک چیست؟ +Assistant1: +``` + +سپس در `Stop Sequences` پارامترهای مدل، `Human1:` را وارد کنید و کلید "Tab" را فشار دهید. + +به این ترتیب، LLM فقط با یک جمله پاسخ خواهد داد: + +``` +Assistant1: خاک زرد است. +``` + +و هیچ گفتگوی دیگری را تولید نخواهد کرد (یعنی LLM تولید محتوا را قبل از رسیدن به "Human1:" بعدی متوقف می‌کند). + +### 4. درج سریع متغیرها و بلوک‌های محتوا + +در **حالت حرفه‌ای**، می‌توانید "`/`" را در ویرایشگر متن تایپ کنید تا به سرعت بلوک‌های محتوا را برای درج در اعلان نمایش دهید. بلوک‌های محتوا شامل: `context`، `variable`، `conversation history`، `query content` هستند. همچنین می‌توانید "`{`" را تایپ کنید تا به سرعت لیستی از متغیرهای قبلاً ایجاد شده را درج کنید. + +

کلید میانبر “/”

+ +{% hint style="warning" %} +بلوک‌های محتوا به غیر از "متغیرها" را نمی‌توان به طور مکرر درج کرد. بلوک‌های محتوای در دسترس ممکن است بر اساس ساختار قالب اعلان در برنامه‌ها و مدل‌های مختلف متفاوت باشد. `Conversation history` و `query content` فقط در مدل‌های تکمیل متن برای برنامه‌های مکالمه‌ای در دسترس هستند. +{% endhint %} + +### 5. ورودی پیش‌اعلان + +قالب اولیه اعلان سیستم پارامترهای لازم و الزامات پاسخ LLM را ارائه می‌دهد. برای جزئیات بیشتر، به 👉[prompt-engineering-template.md](prompt-engineering-template.md "mention") مراجعه کنید. + +هسته اولیه تنظیم توسط توسعه دهندگان پیش‌اعلان است که باید ویرایش شود و در اعلان داخلی درج شود. موقعیت پیشنهادی درج به شرح زیر است (با استفاده از ایجاد یک "iPhone Consultation Customer Service" به عنوان مثال): + +``` +هنگام پاسخ دادن به کاربر: +- اگر نمی‌دانید، فقط بگویید که نمی‌دانید. +- اگر نمی‌دانید یا مطمئن نیستید، برای روشن شدن موضوع سوال بپرسید. +از ذکر اینکه اطلاعات را از زمینه به دست آورده‌اید خودداری کنید. +و با توجه به زبان پرس‌وجوی کاربر پاسخ دهید. + +شما یک دستیار خدمات مشتری برای اپل اینک هستید و می‌توانید خدمات مشاوره برای آیفون‌ها ارائه دهید. +هنگام پاسخ دادن، باید پارامترهای دقیق آیفون را فهرست کنید و باید این اطلاعات را به عنوان یک جدول MARKDOWN عمودی خروجی کنید. اگر لیست خیلی طولانی است، آن را رونویسی کنید. +مجاز هستید برای تولید یک خروجی معقول‌تر، مدت زمان طولانی فکر کنید. +توجه: در حال حاضر شما فقط اطلاعاتی در مورد برخی مدل‌های آیفون دارید، نه همه آنها. +``` + +البته، می‌توانید قالب اولیه را نیز سفارشی کنید، به عنوان مثال، اگر می‌خواهید پاسخ‌های LLM به زبان انگلیسی باشد، می‌توانید اعلان داخلی را به شرح زیر تغییر دهید: + +``` +هنگام پاسخ دادن به کاربر: +- If you don't know, just say that you don't know. +- If you don't know or are not sure, ask for clarification. +Avoid mentioning that you obtained the information from the context. +And answer according to the language English. +``` + +### 6. لاگ‌های اشکال زدایی + +در حین اشکال زدایی تنظیم، نه تنها می‌توانید ورودی کاربر و پاسخ LLM را مشاهده کنید. در **حالت حرفه‌ای**، با کلیک بر روی آیکون در سمت چپ بالای دکمه ارسال پیام، می‌توانید اعلان کامل را مشاهده کنید و این کار برای توسعه دهندگان آسان‌تر می‌کند تا تأیید کنند که آیا محتوای متغیر ورودی، زمینه، تاریخچه چت و محتوای پرس‌وجو مطابق با انتظارات است. برای توضیح دقیق لیست لاگ‌ها، لطفا به مستندات لاگ 👉 مراجعه کنید: [logs.md](../../../../guides/biao-zhu/logs.md "mention") + +#### 6.1 **مشاهده لاگ‌های اشکال زدایی** + +در رابط پیش‌نمایش اشکال زدایی، بعد از یک مکالمه بین کاربر و هوش مصنوعی، نشانگر ماوس را به هر جلسه کاربر منتقل کنید و دکمه آیکون "Log" را در سمت چپ بالا مشاهده خواهید کرد. برای مشاهده لاگ اعلان، روی آن کلیک کنید. + +

ورود به لاگ اشکال زدایی

+ +در لاگ، می‌توانید به وضوح مشاهده کنید: + +* اعلان کامل داخلی +* قطعات متن مرتبط که در جلسه فعلی به آنها ارجاع داده شده است +* سوابق مکالمه تاریخی + +

مشاهده لاگ اعلان در رابط پیش‌نمایش اشکال زدایی

+ +از لاگ، می‌توانید اعلان کامل ارسال شده به LLM را بعد از مونتاژ سیستم مشاهده کنید و به طور مداوم ورودی اعلان را بر اساس نتایج اشکال زدایی بهبود بخشید. + +#### **6.2 تاریخچه اشکال زدایی ردیابی** + +در رابط اصلی برای ساخت اولیه برنامه، می‌توانید "Logs and Annotations" را در نوار ناوبری سمت چپ مشاهده کنید. برای مشاهده کامل لاگ‌ها روی آن کلیک کنید. در رابط اصلی لاگ‌ها و حاشیه نویسی‌ها، روی هر ورودی لاگ مکالمه کلیک کنید، و در کادر گفتگوی سمت راست پاپ‌آپ، نشانگر ماوس را به مکالمه منتقل کنید تا دکمه "Log" را کلیک کنید تا لاگ اعلان را مشاهده کنید. + +

مشاهده لاگ اعلان در رابط Logs and Annotations

+ diff --git a/fa/learn-more/prompt-engineering/prompt-engineering-1/prompt-engineering-template.md b/fa/learn-more/prompt-engineering/prompt-engineering-1/prompt-engineering-template.md new file mode 100644 index 000000000..fc530d729 --- /dev/null +++ b/fa/learn-more/prompt-engineering/prompt-engineering-1/prompt-engineering-template.md @@ -0,0 +1,148 @@ +# الگوهای اولیه اعلان ارجاع + +برای پاسخگویی به نیازهای شخصی‌سازی‌شده‌تر LLM برای توسعه‌دهندگان، Dify به طور کامل همه اعلان‌های موجود در **حالت متخصص** را باز می‌کند و الگوهای اولیه‌ای را در رابط کاربری تنظیم ارائه می‌دهد. در اینجا چندین الگو اولیه ارائه شده است: + +### 1. الگو برای ساخت برنامه‌های مکالمه‌ای با استفاده از مدل‌های گفتگو + +* **سیستم** + +``` +از متن زیر به عنوان دانش یادگرفته خود، داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، به سادگی بگویید که نمی‌دانید. +- اگر مطمئن نیستید، از کاربر برای روشن شدن موضوع بخواهید. +از ذکر اینکه اطلاعات را از متن دریافت کرده‌اید اجتناب کنید. +و با توجه به زبان سوال کاربر پاسخ دهید. +{{pre_prompt}} +``` + +* **کاربر** + +``` +{{Query}} // متغیر پرس و جو را در اینجا وارد کنید +``` + +* **کمک کننده** + +```Python +"" +``` + +#### **ساختار الگو:** + +* متن (`Context`) +* اعلان قبلی (`Pre-prompt`) +* متغیر پرس و جو (`Query`) + +### 2. الگو برای ساخت برنامه‌های تولید متن با استفاده از مدل‌های گفتگو + +* **سیستم** + +``` +از متن زیر به عنوان دانش یادگرفته خود، داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، به سادگی بگویید که نمی‌دانید. +- اگر مطمئن نیستید، از کاربر برای روشن شدن موضوع بخواهید. +از ذکر اینکه اطلاعات را از متن دریافت کرده‌اید اجتناب کنید. +و با توجه به زبان سوال کاربر پاسخ دهید. +{{pre_prompt}} +``` + +* **کاربر** + +``` +{{Query}} // متغیر پرس و جو را در اینجا وارد کنید، که معمولاً به شکل یک پاراگراف است +``` + +* **کمک کننده** + +```Python +"" +``` + +#### **ساختار الگو:** + +* متن (`Context`) +* اعلان قبلی (`Pre-prompt`) +* متغیر پرس و جو (`Query`) + +### 3. الگو برای ساخت برنامه‌های مکالمه‌ای با استفاده از مدل‌های تکمیل متن + +```Python +از متن زیر به عنوان دانش یادگرفته خود، داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، به سادگی بگویید که نمی‌دانید. +- اگر مطمئن نیستید، از کاربر برای روشن شدن موضوع بخواهید. +از ذکر اینکه اطلاعات را از متن دریافت کرده‌اید اجتناب کنید. +و با توجه به زبان سوال کاربر پاسخ دهید. + +{{pre_prompt}} + +در اینجا تاریخچه مکالمه بین انسان و کمک کننده، داخل برچسب‌های XML آمده است. + + +{{#histories#}} + + +انسان: {{#query#}} + +کمک کننده: +``` + +**ساختار الگو:** + +* متن (`Context`) +* اعلان قبلی (`Pre-prompt`) +* تاریخچه مکالمه (`History`) +* متغیر پرس و جو (`Query`) + +### 4. الگو برای ساخت برنامه‌های تولید متن با استفاده از مدل‌های تکمیل متن + +```Python +از متن زیر به عنوان دانش یادگرفته خود، داخل برچسب‌های XML استفاده کنید. + + +{{#context#}} + + +هنگام پاسخ به کاربر: +- اگر نمی‌دانید، به سادگی بگویید که نمی‌دانید. +- اگر مطمئن نیستید، از کاربر برای روشن شدن موضوع بخواهید. +از ذکر اینکه اطلاعات را از متن دریافت کرده‌اید اجتناب کنید. +و با توجه به زبان سوال کاربر پاسخ دهید. + +{{pre_prompt}} +{{query}} +``` + +**ساختار الگو:** + +* متن (`Context`) +* اعلان قبلی (`Pre-prompt`) +* متغیر پرس و جو (`Query`) + +{% hint style="warning" %} +Dify و برخی از فروشندگان مدل، به طور مشترک اعلان‌های سیستم را به طور کامل بهینه کرده‌اند. بنابراین، الگوهای اولیه در برخی از مدل‌ها ممکن است با مثال‌های فوق متفاوت باشد. +{% endhint %} + +### توضیحات پارامترها + +* متن (`Context`): برای درج متن مرتبط از مجموعه داده‌ها به عنوان متن اعلان کامل استفاده می‌شود. +* اعلان قبلی (`Pre-prompt`): در **حالت آسان**، اعلان قبلی تنظیم شده به اعلان کامل درج می‌شود. +* تاریخچه مکالمه (`History`): هنگام ساخت برنامه‌های مکالمه‌ای با استفاده از مدل‌های تولید متن، سیستم تاریخچه مکالمه کاربر را به عنوان متن به اعلان کامل درج می‌کند. از آنجایی که برخی از مدل‌ها با پیشوند نقش متفاوت پاسخ می‌دهند، می‌توانید پیشوند نقش را در تنظیمات تاریخچه مکالمه نیز تغییر دهید، مثلاً تغییر "کمک کننده" به "هوش مصنوعی". +* پرس و جو (`Query`): محتوای پرس و جو، مقدار متغیری است که برای درج سوال کاربر در چت استفاده می‌شود. diff --git a/fa/learn-more/use-cases/README.md b/fa/learn-more/use-cases/README.md new file mode 100644 index 000000000..ffe924dfc --- /dev/null +++ b/fa/learn-more/use-cases/README.md @@ -0,0 +1 @@ +# موارد استفاده diff --git a/fa/learn-more/use-cases/build-an-notion-ai-assistant.md b/fa/learn-more/use-cases/build-an-notion-ai-assistant.md new file mode 100644 index 000000000..b789e3a63 --- /dev/null +++ b/fa/learn-more/use-cases/build-an-notion-ai-assistant.md @@ -0,0 +1,166 @@ +# ساخت دستیار هوش مصنوعی Notion + +### مقدمه + +Notion یک ابزار قدرتمند برای مدیریت دانش است. انعطاف‌پذیری و قابلیت توسعه آن، آن را به یک کتابخانه دانش شخصی و فضای کاری مشترک عالی تبدیل می‌کند. بسیاری از افراد از آن برای ذخیره دانش و کار در کنار دیگران استفاده می‌کنند و تبادل ایده‌ها و ایجاد دانش جدید را تسهیل می‌کنند. + +با این حال، این دانش ثابت باقی می‌ماند، زیرا کاربران باید به دنبال اطلاعات مورد نیاز خود باشند و آن را مطالعه کنند تا پاسخ‌های مورد نظر خود را پیدا کنند. این فرآیند نه به طور خاص کارآمد است و نه هوشمندانه. + +آیا تا به حال آرزو کرده‌اید که یک دستیار هوش مصنوعی مبتنی بر کتابخانه Notion خود داشته باشید؟ این دستیار نه تنها شما را در مرور پایگاه دانش خود یاری می‌کند، بلکه مانند یک خدمتکار باتجربه، حتی در پاسخگویی به سوالات دیگران نیز مشارکت می‌کند، گویی که شما صاحب کتابخانه شخصی Notion خود هستید. + +### چگونه دستیار هوش مصنوعی Notion خود را به واقعیت تبدیل کنیم؟ + +اکنون، می‌توانید این رویا را از طریق [Dify](https://dify.ai/) به حقیقت تبدیل کنید. Dify یک پلتفرم LLMOps (عملیات مدل‌های زبان بزرگ) متن‌باز است. + +مدل‌های زبان بزرگ مانند ChatGPT و Claude، از توانایی‌های چشمگیر خود برای تغییر شکل جهان استفاده می‌کنند. توانایی یادگیری قدرتمند آنها عمدتا به دلیل داده‌های آموزشی قوی است. خوشبختانه، آنها به اندازه کافی باهوش شده‌اند تا از محتوایی که شما ارائه می‌کنید بیاموزند و بدین ترتیب، فرآیند ایده پردازی از کتابخانه شخصی Notion شما، به واقعیت تبدیل می‌شود. + +بدون Dify، ممکن است نیاز باشد که خودتان را با langchain، یک انتزاع که فرآیند مونتاژ این قطعات را ساده می‌کند، آشنا کنید. + +### چگونه از Dify برای ساخت دستیار هوش مصنوعی شخصی Notion خود استفاده کنیم؟ + +فرآیند آموزش یک دستیار هوش مصنوعی Notion نسبتاً ساده است. فقط مراحل زیر را دنبال کنید: + +1. وارد Dify شوید. +2. یک پایگاه دانش جدید ایجاد کنید. +3. با Notion و پایگاه داده‌های خود ارتباط برقرار کنید. +4. آموزش را شروع کنید. +5. برنامه هوش مصنوعی خود را ایجاد کنید. + +#### 1. ورود به Dify + +برای ورود به Dify، روی [اینجا](https://dify.ai/) کلیک کنید. می‌توانید به راحتی از طریق حساب GitHub یا Google خود وارد شوید. + +> اگر از حساب GitHub برای ورود استفاده می‌کنید، چگونه است که این [پروژه](https://github.com/langgenius/dify) را با یک ستاره برجسته می‌کنید؟ این واقعاً به ما کمک زیادی می‌کند! + +#### 2. ایجاد پایگاه دانش جدید + +روی دکمه `Knowledge` در نوار کناری بالا، و سپس روی دکمه `Create Knowledge` کلیک کنید. + +![login-2](../../.gitbook/assets/login-2.png) + +#### 3. اتصال با Notion و پایگاه داده‌های خود[​](https://wsyfin.com/notion-dify#3-connect-with-notion-and-datasets) + +"Sync from Notion" را انتخاب کنید و سپس روی دکمه "Connect" کلیک کنید. + +![connect-with-notion-1](../../.gitbook/assets/connect-with-notion-1.png) + +سپس، به صفحه ورود Notion هدایت خواهید شد. با حساب Notion خود وارد شوید. + +
+ +مجوزهای مورد نیاز Dify را بررسی کنید و سپس روی دکمه "Select pages" کلیک کنید. + +
+ +صفحاتی را که می‌خواهید با Dify همگام‌سازی کنید، انتخاب کنید و روی دکمه "Allow access" کلیک کنید. + +
+ +#### 4. شروع آموزش[​](https://wsyfin.com/notion-dify#4-start-training) + +صفحاتی را که هوش مصنوعی باید آنها را مطالعه کند، مشخص کنید، و به آن اجازه دهید تا محتوای موجود در این بخش از Notion را درک کند. سپس روی دکمه "next" کلیک کنید. + +![train-1](../../.gitbook/assets/train-1.png) + +ما پیشنهاد می‌کنیم که گزینه‌های "Automatic" و "High Quality" را برای آموزش دستیار هوش مصنوعی خود انتخاب کنید. سپس روی دکمه "Save & Process" کلیک کنید. + +![train-2](../../.gitbook/assets/train-2.png) + +در حالی که منتظر اتمام فرآیند آموزش هستید، از قهوه خود لذت ببرید. + +![train-3](../../.gitbook/assets/train-3.png) + +#### 5. ایجاد برنامه هوش مصنوعی خود[​](https://wsyfin.com/notion-dify#5-create-your-ai-application) + +باید یک برنامه هوش مصنوعی ایجاد کنید و آن را با دانش تازه ایجاد شده خود پیوند دهید. + +به داشبورد برگردید و روی دکمه "Create new APP" کلیک کنید. توصیه می‌شود که مستقیماً از "Chat App" استفاده کنید. + +![create-app-1](../../.gitbook/assets/create-app-1.png) + +"Prompt Eng." را انتخاب کنید و پایگاه داده‌های Notion خود را در "context" پیوند دهید. + +![create-app-2](../../.gitbook/assets/create-app-2.png) + +من توصیه می‌کنم که "Pre Prompt" را به برنامه هوش مصنوعی خود اضافه کنید. درست مانند طلسم‌ها که برای هری پاتر ضروری هستند، ابزارها یا ویژگی‌های خاصی می‌توانند توانایی برنامه هوش مصنوعی را به شدت افزایش دهند. + +به عنوان مثال، اگر یادداشت‌های Notion شما بر حل مسئله در توسعه نرم‌افزار متمرکز است، می‌توانید در یکی از دستورالعمل‌ها بنویسید: + +_من می‌خواهم شما به عنوان یک متخصص فناوری اطلاعات در فضای کاری Notion من عمل کنید، از دانش خود در مورد علوم کامپیوتر، زیرساخت‌های شبکه، یادداشت‌های Notion و امنیت فناوری اطلاعات برای حل مشکلات استفاده کنید_. + +
+ +توصیه می‌شود که در ابتدا هوش مصنوعی را قادر سازید که به طور فعال به کاربران یک جمله آغازین ارائه دهد و به آنها سرنخی در مورد آنچه که می‌توانند بپرسند، ارائه دهد. علاوه بر این، فعال کردن ویژگی "Speech to Text" می‌تواند به کاربران اجازه دهد تا با استفاده از صدای خود با دستیار هوش مصنوعی شما تعامل داشته باشند. + +
+ +در نهایت، روی دکمه "Publish" در سمت راست بالای صفحه کلیک کنید. اکنون می‌توانید روی URL عمومی در بخش "Monitoring" کلیک کنید تا با دستیار هوش مصنوعی شخصی خود گفتگو کنید! + +![create-app-4](../../.gitbook/assets/app-url.png) + +### استفاده از API برای ادغام با پروژه خود + +هر برنامه هوش مصنوعی که توسط Dify ساخته شده است، از طریق API آن قابل دسترسی است. این روش به توسعه‌دهندگان امکان می‌دهد تا مستقیماً از ویژگی‌های قدرتمند مدل‌های زبان بزرگ (LLMs) در برنامه‌های سمت کاربر استفاده کنند و یک تجربه "Backend-as-a-Service" (BaaS) واقعی را ارائه دهند. + +با ادغام API بدون دردسر، می‌توانید به راحتی برنامه هوش مصنوعی Notion خود را بدون نیاز به تنظیمات پیچیده فراخوانی کنید. + +روی دکمه "API Reference" در صفحه Overview page کلیک کنید. می‌توانید به آن به عنوان سند API برنامه خود مراجعه کنید. + +![using-api-1](../../.gitbook/assets/api-reference.png) + +#### 1. تولید کلید مخفی API[​](https://wsyfin.com/notion-dify#1-generate-api-secret-key) + +به دلایل امنیتی، توصیه می‌شود که یک کلید مخفی API جدید برای دسترسی به برنامه هوش مصنوعی خود ایجاد کنید. + +![using-api-2](../../.gitbook/assets/using-api-2.png) + +#### 2. بازیابی ID مکالمه[​](https://wsyfin.com/notion-dify#2-retrieve-conversation-id) + +پس از گفتگو با برنامه هوش مصنوعی خود، می‌توانید ID جلسه را از صفحات "Logs & Ann." بازیابی کنید. + +![using-api-3](../../.gitbook/assets/using-api-3.png) + +#### 3. فراخوانی API[​](https://wsyfin.com/notion-dify#3-invoke-api) + +می‌توانید کد درخواست نمونه را در سند API برای فراخوانی برنامه هوش مصنوعی خود در ترمینال اجرا کنید. + +به یاد داشته باشید که `YOUR 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](../../.gitbook/assets/using-api-4.png) + +اگر می‌خواهید این گفتگو را ادامه دهید، `conversation_id` کد درخواست را به `conversation_id` که از پاسخ دریافت کرده‌اید، جایگزین کنید. + +و می‌توانید تمام تاریخچه مکالمه را در صفحه "Logs & Ann." بررسی کنید. + +![using-api-5](../../.gitbook/assets/using-api-5.png) + +### همگام‌سازی با Notion به طور دوره‌ای[​](https://wsyfin.com/notion-dify#sync-with-notion-periodically) + +اگر صفحات Notion شما به روز شده‌اند، می‌توانید به طور دوره‌ای با Dify همگام‌سازی کنید تا دستیار هوش مصنوعی شما به روز باشد. دستیار هوش مصنوعی شما از محتوای جدید یاد خواهد گرفت. + +![create-app-5](../../.gitbook/assets/create-app-5.png) + +### خلاصه[​](https://wsyfin.com/notion-dify#summary) + +در این آموزش، نه تنها نحوه وارد کردن داده‌های Notion خود به Dify را آموخته‌ایم، بلکه نحوه استفاده از API برای ادغام آن با پروژه خود را نیز می‌دانیم. + +[Dify](https://dify.ai/) یک پلتفرم LLMOps کاربرپسند است که برای توانمندسازی افراد بیشتر برای ایجاد برنامه‌های پایدار و بومی AI طراحی شده است. Dify با ارکستراسیون بصری که برای انواع مختلف برنامه‌ها طراحی شده است، برنامه‌های آماده استفاده‌ای را ارائه می‌دهد که می‌توانند شما را در استفاده از داده‌ها برای ساخت دستیار هوش مصنوعی منحصر به فرد خود کمک کنند. اگر سوالی دارید، دریغ نکنید که با ما تماس بگیرید. + + diff --git a/fa/learn-more/use-cases/create-a-midjourney-prompt-bot-with-dify.md b/fa/learn-more/use-cases/create-a-midjourney-prompt-bot-with-dify.md new file mode 100644 index 000000000..a4a09635b --- /dev/null +++ b/fa/learn-more/use-cases/create-a-midjourney-prompt-bot-with-dify.md @@ -0,0 +1,58 @@ +# ساخت یک ربات تولید کننده Prompt Midjourney با Dify + +از طریق [@op7418](https://twitter.com/op7418) در توییتر + +اخیرا یک ابزار برنامه نویسی زبان طبیعی به نام Dify را که توسط [@goocarlos](https://twitter.com/goocarlos) ساخته شده است، امتحان کردم. این ابزار به افراد بدون دانش کدنویسی اجازه می دهد تا فقط با نوشتن Prompts، یک برنامه وب بسازند. حتی API را برای شما تولید می کند، که باعث می شود استقرار برنامه شما در پلتفرم مورد نظر شما آسان شود. + +برنامه ای که با استفاده از Dify ساختم، تنها 20 دقیقه طول کشید و نتایج آن چشمگیر بود. بدون Dify، رسیدن به همان نتیجه ممکن است زمان بسیار بیشتری از من می گرفت. عملکرد خاص این برنامه، تولید Prompts Midjourney بر اساس موضوعات کوتاه ورودی است که به کاربران در سریع پر کردن دستورات متداول Midjourney کمک می کند. در این راهنما، شما را در فرآیند ساخت این برنامه راهنمایی می کنم تا با این پلتفرم آشنا شوید. + +Dify دو نوع برنامه را ارائه می دهد: برنامه های مکالمه ای مشابه ChatGPT که شامل دیالوگ های چند دور است و برنامه های تولید متن که مستقیما با یک کلیک، محتوای متنی تولید می کنند. از آنجایی که می خواهیم یک ربات تولید کننده Prompt Midjourney بسازیم، generator متن را انتخاب خواهیم کرد. + +می توانید به Dify از اینجا دسترسی پیدا کنید: https://dify.ai/ + +
+ +پس از ایجاد برنامه خود، صفحه داشبورد برخی از داده های نظارت و تنظیمات برنامه را نشان می دهد. روی "مهندسی Prompt" در سمت چپ، که صفحه اصلی کار است، کلیک کنید. + +
+ +در این صفحه، سمت چپ برای تنظیمات Prompt و سایر توابع است، در حالی که سمت راست پیش نمایش ها و استفاده های زمان واقعی از محتوای ساخته شده توسط شما را ارائه می دهد. Prompts پیشوند، محرک هایی هستند که کاربر پس از هر محتوا وارد می کند و به مدل GPT دستور می دهند که چگونه اطلاعات ورودی کاربر را پردازش کند. + +
+ +ساختار Prompt پیشوند من را بررسی کنید: قسمت اول GPT را راهنمایی می کند تا یک توصیف از عکس را در ساختار زیر خروجی کند. ساختار دوم به عنوان الگویی برای تولید Prompt عمل می کند، که عمدتا شامل عناصری مانند "عکس رنگی از موضوع"، "الگوهای پیچیده"، "کنتراست های شدید"، "شرح محیطی"، "مدل دوربین"، "شرح طول کانونی لنز مربوط به محتوای ورودی"، "شرح ترکیب بندی مربوط به محتوای ورودی" و "نام چهار عکاس برجسته" است. اینها محتوای اصلی Prompt را تشکیل می دهند. از نظر تئوری، شما می توانید این را در ناحیه پیش نمایش در سمت راست ذخیره کنید، موضوعی را که می خواهید تولید کنید وارد کنید، و Prompt مربوطه تولید خواهد شد. + +
+ +شاید متوجه "\{{proportion\}}" و "\{{version\}}" در انتها شده باشید. اینها متغیرهایی هستند که برای ارسال اطلاعات انتخاب شده توسط کاربر استفاده می شوند. در سمت راست، کاربران باید تناسبات تصویر و نسخه های مدل را انتخاب کنند و این دو متغیر به حمل این اطلاعات به انتهای Prompt کمک می کنند. بیایید ببینیم چگونه آنها را تنظیم کنیم. + +
+ +هدف ما پر کردن اطلاعات انتخاب شده توسط کاربر در انتهای Prompt است که باعث می شود کاربران بدون نیاز به بازنویسی یا حفظ این دستورات، به راحتی آن را کپی کنند. برای این منظور، از تابع متغیر استفاده می کنیم. + +متغیرها به ما این امکان را می دهند تا محتوای انتخاب شده یا پر شده توسط کاربر را به طور پویا در Prompt ادغام کنیم. به عنوان مثال، من دو متغیر ایجاد کرده ام: یکی نشان دهنده تناسبات تصویر است و دیگری نشان دهنده نسخه مدل است. برای ایجاد متغیرها، روی دکمه "اضافه کردن" کلیک کنید. + +
+ +بعد از ایجاد، باید کلید متغیر و نام فیلد را پر کنید. کلید متغیر باید به انگلیسی باشد. تنظیم اختیاری به این معنی است که فیلد در هنگام پر کردن توسط کاربر، اجباری نخواهد بود. سپس، روی "تنظیمات" در نوار اقدام کلیک کنید تا محتوای متغیر را تنظیم کنید. + +
+ +متغیرها می توانند از دو نوع باشند: متغیرهای متنی که کاربران به صورت دستی محتوای آن را وارد می کنند و گزینه های انتخابی که کاربران از بین گزینه های داده شده انتخاب می کنند. از آنجایی که می خواهیم از دستورات دستی اجتناب کنیم، گزینه کشویی را انتخاب می کنیم و گزینه های مورد نیاز را اضافه می کنیم. + +
+ +حالا بیایید از متغیرها استفاده کنیم. باید کلید متغیر را درون دو آکولاد {} محصور کنیم و آن را به Prompt پیشوند اضافه کنیم. از آنجایی که می خواهیم GPT محتوای انتخاب شده توسط کاربر را همانطور که هست خروجی دهد، عبارت "تولید توصیف عکس انگلیسی زیر بر اساس ورودی کاربر" را در Prompt قرار می دهیم. + +
+ +با این حال، هنوز احتمال اینکه GPT محتوای متغیر ما را تغییر دهد وجود دارد. برای رفع این مشکل، می توانیم تنوع را در انتخاب مدل در سمت راست کاهش دهیم، درجه حرارت را کم کنیم و احتمال تغییر محتوای متغیر ما را کاهش دهیم. می توانید معنی سایر پارامترها را در راهنماها بررسی کنید. + +
+ +با این مراحل، برنامه شما اکنون کامل شده است. پس از تست و اطمینان از اینکه هیچ مشکلی با خروجی وجود ندارد، برای انتشار برنامه خود، روی دکمه "انتشار" در گوشه بالا سمت راست کلیک کنید. شما و کاربران می توانید از طریق URL در دسترس عموم به برنامه خود دسترسی پیدا کنید. همچنین می توانید نام برنامه، مقدمه، آیکون و سایر جزئیات را در تنظیمات سفارشی کنید. + +
+ +این نحوه ساخت یک برنامه هوش مصنوعی ساده با استفاده از Dify است. همچنین می توانید برنامه خود را در پلتفرم های دیگر استقرار دهید یا رابط کاربری آن را با استفاده از API تولید شده، اصلاح کنید. علاوه بر این، Dify از آپلود داده های شما، مانند ساخت یک ربات خدمات مشتری برای کمک به پرسش های مربوط به محصول پشتیبانی می کند. این پایان راهنما است و از @goocarlos برای ساخت چنین محصول فوق العاده ای تشکر ویژه می کنم. + diff --git a/fa/learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md b/fa/learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md new file mode 100644 index 000000000..2fa1fe9f1 --- /dev/null +++ b/fa/learn-more/use-cases/create-an-ai-chatbot-with-business-data-in-minutes.md @@ -0,0 +1,61 @@ +# ایجاد یک چت بات هوش مصنوعی با داده های تجاری در چند دقیقه + +خدمات مشتریان مبتنی بر هوش مصنوعی ممکن است یک ویژگی استاندارد برای هر وب سایت تجاری باشد و با سطوح بالاتر از سفارشی سازی، پیاده سازی آن آسان تر می شود. محتوای زیر شما را در مورد نحوه ایجاد یک خدمات مشتری مبتنی بر هوش مصنوعی برای وب سایت خود در عرض چند دقیقه با استفاده از Dify راهنمایی می کند. + +### پیش نیاز + +**ثبت نام یا استقرار Dify.AI** + +Dify یک محصول متن باز است که می توانید آن را در [GitHub](https://github.com/langgenius/dify) پیدا کنید و آن را در اینترانت محلی یا شرکت خود مستقر کنید. در عین حال، یک نسخه SaaS مبتنی بر ابر را ارائه می دهد، به [Didy.AI ](https://dify.ai/) دسترسی پیدا کنید تا ثبت نام کنید و از آن استفاده کنید. + +**درخواست کلید API از OpenAI و سایر ارائه دهندگان مدل.** + +Dify سهمیه استفاده از تماس پیام رایگان برای مدل های هوش مصنوعی OpenAI GPT series (200 بار) و Antropic Claude (1000 بار) را ارائه می دهد که برای مصرف به توکن نیاز دارند. قبل از اینکه سهمیه شما به پایان برسد، باید از طریق کانال رسمی ارائه دهنده مدل برای کلید API خود درخواست کنید. می توانید این کلید را در "تنظیمات" Dify - "ارائه دهنده مدل" وارد کنید. + +### اسناد محصول یا پایگاه دانش خود را آپلود کنید. + +اگر می خواهید یک چت بات هوش مصنوعی مبتنی بر پایگاه دانش موجود شرکت و اسناد محصول خود بسازید، باید تا حد امکان اسناد مرتبط با محصول را به دانش Dify آپلود کنید. Dify به شما کمک می کند **قطعه بندی و پاکسازی داده ها را کامل کنید.** دانش Dify از دو حالت نمایه سازی پشتیبانی می کند: با کیفیت بالا و اقتصادی. توصیه می کنیم از حالت با کیفیت بالا استفاده کنید که توکن مصرف می کند اما دقت بالاتری را ارائه می دهد. + +1. یک پایگاه دانش جدید ایجاد کنید. +2. داده های تجاری خود را آپلود کنید (از آپلود دسته ای چندین متن پشتیبانی می کند) +3. روش پاکسازی را انتخاب کنید. +4. روی [ذخیره و پردازش] کلیک کنید و فقط چند ثانیه طول می کشد تا پردازش کامل شود. + +![](../../.gitbook/assets/ai-chatbot-knowledge-base.png) + +### یک برنامه هوش مصنوعی ایجاد کنید و دستورالعمل هایی به آن بدهید. + +یک برنامه مکالمه ای در صفحه [ساخت برنامه] ایجاد کنید. سپس شروع به تنظیم درخواست و تعاملات تجربه کاربری آن در سمت سرور کنید. + +1. دستورالعمل هوش مصنوعی را بدهید: روی "قبل از درخواست" در سمت چپ کلیک کنید تا درخواست خود را ویرایش کنید تا بتواند نقش خدمات مشتری را بازی کند و با کاربران ارتباط برقرار کند. می توانید لحن، سبک و محدودیت پاسخ یا عدم پاسخ به سوالات خاص را مشخص کنید. +2. به هوش مصنوعی اجازه دهید به دانش تجاری شما دسترسی داشته باشد: دانش هدف را که تازه آپلود کرده اید، در [محتوا] اضافه کنید. +3. سخنان آغازین را تنظیم کنید: روی "افزودن ویژگی" کلیک کنید تا این ویژگی را فعال کنید. هدف این است که یک خط آغازین برای برنامه های هوش مصنوعی اضافه کنید، به طوری که وقتی کاربر پنجره خدمات مشتری را باز می کند، ابتدا کاربر را خوشامد می گوید و افزایش نزدیکی را به همراه دارد. +4. "پیشنهاد سوال بعدی" را تنظیم کنید: این ویژگی را برای "افزودن ویژگی" فعال کنید. هدف این است که پس از اینکه کاربر یک سوال پرسید، به کاربران جهت سوال بعدی خود را بدهید. +5. یک مدل مناسب انتخاب کنید و پارامترها را تنظیم کنید: مدل های مختلف را می توان در گوشه بالا سمت راست صفحه انتخاب کرد. عملکرد و قیمت توکن مصرف شده توسط مدل های مختلف متفاوت است. در این مثال، ما از مدل GPT3.5 استفاده می کنیم. + +در این مورد، ما یک نقش به هوش مصنوعی اختصاص می دهیم: + +> قبل از درخواست: شما باب هستید، خدمات مشتری هوش مصنوعی برای Dify، متخصص در پاسخ به سوالات مربوط به محصولات، تیم یا LLMOps Dify برای کاربران. لطفاً توجه داشته باشید که هنگام پرسیدن "سوالات نامناسب" از پاسخ دادن خودداری کنید، یعنی محتوا خارج از دامنه این سند. + +> سخنان آغازین: سلام \{{User\_name\}}, من باب☀️ هستم، اولین عضو هوش مصنوعی Dify. می توانید در مورد هر سوالی که به محصولات، تیم و حتی LLMOps Dify مربوط می شود با من صحبت کنید. + +
+ +### عملکرد چت بات هوش مصنوعی را عیب یابی و منتشر کنید. + +پس از تکمیل تنظیمات، می توانید از طریق سمت راست صفحه فعلی پیام هایی به آن ارسال کنید تا عیب یابی کنید که آیا عملکرد آن مطابق انتظار است یا خیر. سپس روی "انتشار" کلیک کنید. و سپس شما یک چت بات هوش مصنوعی خواهید داشت. + +
+ +### برنامه چت بات هوش مصنوعی را در صفحه سمت سرور خود جاسازی کنید. + +این مرحله برای جاسازی چت بات هوش مصنوعی آماده شده در وب سایت رسمی شما است. روی [نمای کلی] -> [جاسازی شده] کلیک کنید، روش تگ اسکریپت را انتخاب کنید و کد اسکریپت را در تگ \ یا \ وب سایت خود کپی کنید. اگر فرد فنی نیستید، می توانید از توسعه دهنده ای که مسئول وب سایت رسمی است بخواهید تا این کد را جایگذاری و صفحه را به روز کند. + +
+ +1. کد کپی شده را در مکان هدف در وب سایت خود جایگذاری کنید. +2. وب سایت رسمی خود را به روز کنید و می توانید یک خدمات مشتری هوش مصنوعی هوشمند با داده های تجاری خود دریافت کنید. آن را امتحان کنید تا اثر آن را ببینید. + +در بالا، یک نمونه از نحوه جاسازی Dify در وب سایت رسمی از طریق چت بات هوش مصنوعی باب در وب سایت رسمی Dify است. البته، می توانید از ویژگی های بیشتر ارائه شده توسط Dify برای افزایش عملکرد چت بات استفاده کنید، مانند اضافه کردن برخی تنظیمات متغیر، به طوری که کاربران بتوانند قبل از تعامل، اطلاعات قضاوت لازم را مانند نام، محصول خاص مورد استفاده و غیره را پر کنند. + +به کاوش در Dify به طور مشترک خوش آمدید! diff --git a/fa/learn-more/use-cases/how-to-connect-aws-bedrock.md b/fa/learn-more/use-cases/how-to-connect-aws-bedrock.md new file mode 100644 index 000000000..b56e6b92a --- /dev/null +++ b/fa/learn-more/use-cases/how-to-connect-aws-bedrock.md @@ -0,0 +1,169 @@ +# نحوه اتصال به پایگاه دانش AWS Bedrock؟ + +این مقاله به طور مختصر نحوه اتصال پلتفرم Dify به پایگاه دانش AWS Bedrock از طریق [API پایگاه دانش خارجی](https://docs.dify.ai/guides/knowledge-base/external-knowledge-api-documentation) را معرفی می کند، به طوری که برنامه های هوش مصنوعی در پلتفرم Dify می توانند به طور مستقیم محتوای ذخیره شده در پایگاه دانش AWS Bedrock را بدست آورند و کانال های جدید منبع اطلاعات را گسترش دهند. + +### آماده سازی اولیه + +* پایگاه دانش AWS Bedrock +* سرویس Dify SaaS / نسخه Dify Community +* اصول توسعه API Back-end + +### 1. ثبت نام و ایجاد پایگاه دانش AWS Bedrock + +از [AWS Bedrock](https://aws.amazon.com/bedrock/) دیدن کرده و سرویس پایگاه دانش را ایجاد کنید. + +

ایجاد پایگاه دانش AWS Bedrock

+ +### 2. ساخت سرویس API Back-end + +پلتفرم Dify نمی تواند مستقیماً به پایگاه دانش AWS Bedrock متصل شود. توسعه دهنده باید به [تعریف API](../../guides/knowledge-base/external-knowledge-api-documentation.md) Dify در مورد اتصال به پایگاه دانش خارجی مراجعه کند، سرویس API Back-end را به طور دستی ایجاد کند و ارتباطی با AWS Bedrock برقرار کند. لطفاً به نمودار معماری خاص مراجعه کنید: + +

ساخت سرویس API Back-end

+ +شما می توانید به 2 کد دمو زیر مراجعه کنید. + +`knowledge.py` + +```python +from flask import request +from flask_restful import Resource, reqparse + +from bedrock.knowledge_service import ExternalDatasetService + + +class BedrockRetrievalApi(Resource): + # url : /retrieval + def post(self): + parser = reqparse.RequestParser() + parser.add_argument("retrieval_setting", nullable=False, required=True, type=dict, location="json") + parser.add_argument("query", nullable=False, required=True, type=str,) + parser.add_argument("knowledge_id", nullable=False, required=True, type=str) + args = parser.parse_args() + + # بررسی مجوز + auth_header = request.headers.get("Authorization") + if " " not in auth_header: + return { + "error_code": 1001, + "error_msg": "فرمت هدر مجوز نامعتبر است. فرمت مورد انتظار 'Bearer ' است." + }, 403 + auth_scheme, auth_token = auth_header.split(None, 1) + auth_scheme = auth_scheme.lower() + if auth_scheme != "bearer": + return { + "error_code": 1001, + "error_msg": "فرمت هدر مجوز نامعتبر است. فرمت مورد انتظار 'Bearer ' است." + }, 403 + if auth_token: + # منطق مجوز خود را در اینجا پردازش کنید + pass + + # فراخوانی سرویس بازیابی دانش + result = ExternalDatasetService.knowledge_retrieval( + args["retrieval_setting"], args["query"], args["knowledge_id"] + ) + return result, 200 +``` + +`knowledge_service.py` + +```python +import boto3 + + +class ExternalDatasetService: + @staticmethod + def knowledge_retrieval(retrieval_setting: dict, query: str, knowledge_id: str): + # دریافت کلاینت bedrock + client = boto3.client( + "bedrock-agent-runtime", + aws_secret_access_key="AWS_SECRET_ACCESS_KEY", + aws_access_key_id="AWS_ACCESS_KEY_ID", + # مثال: us-east-1 + region_name="AWS_REGION_NAME", + ) + # دریافت بازیابی دانش خارجی + response = client.retrieve( + knowledgeBaseId=knowledge_id, + retrievalConfiguration={ + "vectorSearchConfiguration": {"numberOfResults": retrieval_setting.get("top_k"), "overrideSearchType": "HYBRID"} + }, + retrievalQuery={"text": query}, + ) + # تجزیه پاسخ + results = [] + if response.get("ResponseMetadata") and response.get("ResponseMetadata").get("HTTPStatusCode") == 200: + if response.get("retrievalResults"): + retrieval_results = response.get("retrievalResults") + for retrieval_result in retrieval_results: + # فیلتر کردن نتایج با نمره کمتر از آستانه + if retrieval_result.get("score") < retrieval_setting.get("score_threshold", .0): + continue + result = { + "metadata": retrieval_result.get("metadata"), + "score": retrieval_result.get("score"), + "title": retrieval_result.get("metadata").get("x-amz-bedrock-kb-source-uri"), + "content": retrieval_result.get("content").get("text"), + } + results.append(result) + return { + "records": results + } +``` + +در طول فرآیند، شما می توانید آدرس انتهای API و کلید API را برای احراز هویت بسازید و از آنها برای اتصالات بعدی استفاده کنید. + +### 3. دریافت شناسه پایگاه دانش AWS Bedrock + +پس از ورود به سیستم به پشت صحنه AWS Bedrock Knowledge و دریافت شناسه پایگاه دانش ایجاد شده، می توانید از این پارامتر برای اتصال به پلتفرم Dify در مراحل بعدی استفاده کنید. + +

دریافت شناسه پایگاه دانش AWS Bedrock

+ +### 4. مرتبط کردن API دانش خارجی + +به صفحه **"دانش"** در پلتفرم Dify بروید، روی **"API دانش خارجی"** در گوشه بالا سمت راست کلیک کنید و **"اضافه کردن API دانش خارجی"** را لمس کنید. + +دستورالعمل های روی صفحه را دنبال کرده و اطلاعات زیر را پر کنید: + +* نام پایگاه دانش. نام های سفارشی مجاز هستند تا API های مختلف دانش خارجی متصل شده به پلتفرم Dify را از هم متمایز کنند. +* آدرس انتهای API، آدرس اتصال به پایگاه دانش خارجی، که می تواند در [مرحله 2](how-to-connect-aws-bedrock.md#id-2.build-the-backend-api-service) سفارشی شود. مثال: `api-endpoint/retrieval`؛ +* کلید API، کلید اتصال به پایگاه دانش خارجی، که می تواند در [مرحله 2](how-to-connect-aws-bedrock.md#id-2.build-the-backend-api-service) سفارشی شود. + +
+ +### 5. اتصال به پایگاه دانش خارجی + +به صفحه **“دانش”** بروید، روی **“اتصال به پایگاه دانش خارجی”** در زیر کارت اضافه کردن پایگاه دانش کلیک کنید تا به صفحه پیکربندی پارامترها بروید. + +
+ +پارامترهای زیر را پر کنید: + +* **نام و توضیحات پایگاه دانش** +* **API پایگاه دانش خارجی** + +API پایگاه دانش خارجی مرتبط شده در مرحله 4 را انتخاب کنید. +* **شناسه پایگاه دانش خارجی** + +شناسه پایگاه دانش AWS Bedrock دریافت شده در مرحله 3 را پر کنید. +* **تنظیمات یادآوری را تنظیم کنید** + +**Top K:** هنگامی که کاربر سؤالی می پرسد، از API دانش خارجی خواسته می شود تا محتواهای مرتبط را بازیابی کند. از این پارامتر برای فیلتر کردن بخش های متن با شباهت زیاد به سوالات کاربر استفاده می شود. مقدار پیش فرض 3 است. هرچه این مقدار بیشتر باشد، بخش های متن مرتبط تری بازیابی می شوند. + +**آستانه امتیاز:** آستانه شباهت برای فیلتر کردن بخش های متن. فقط بخش های متن با امتیازی که از امتیاز تنظیم شده بیشتر است بازیابی می شوند. مقدار پیش فرض 0.5 است. هر چه این مقدار بیشتر باشد، شباهت مورد نیاز بین متن و سوال بیشتر است، تعداد متن های مورد انتظار برای بازیابی کمتر است و نتیجه دقیق تر خواهد بود. + +
+ +پس از تکمیل تنظیمات، می توانید ارتباطی با API پایگاه دانش خارجی برقرار کنید. + +### 6. تست اتصال و بازیابی پایگاه دانش خارجی + +پس از برقراری ارتباط با پایگاه دانش خارجی، توسعه دهندگان می توانند کلمات کلیدی سوالات احتمالی کاربر را در **"تست بازیابی"** شبیه سازی کرده و پیش نمایش بخش های متن بازیابی شده از پایگاه دانش AWS Bedrock را مشاهده کنند. + +

تست اتصال و بازیابی پایگاه دانش خارجی

+ +اگر از نتایج بازیابی راضی نیستید، می توانید سعی کنید پارامترهای بازیابی را تغییر دهید یا تنظیمات بازیابی پایگاه دانش AWS Bedrock را تنظیم کنید. + +

تنظیم پارامترهای بخش بندی متن پایگاه دانش AWS Bedrock

+ + diff --git a/fa/learn-more/use-cases/how-to-integrate-dify-chatbot-to-your-wix-website.md b/fa/learn-more/use-cases/how-to-integrate-dify-chatbot-to-your-wix-website.md new file mode 100644 index 000000000..fea5b9893 --- /dev/null +++ b/fa/learn-more/use-cases/how-to-integrate-dify-chatbot-to-your-wix-website.md @@ -0,0 +1,92 @@ +# ادغام چت‌بات Dify در وب‌سایت Wix + +Wix یک پلتفرم محبوب ساخت وب‌سایت است که به کاربران اجازه می‌دهد وب‌سایت‌های خود را به صورت بصری و با استفاده از قابلیت کشیدن و رها کردن طراحی کنند. با استفاده از قابلیت کد iframe Wix، می‌توانید به سادگی یک چت‌بات Dify را در سایت Wix خود ادغام کنید. + +این قابلیت فراتر از ادغام چت‌بات است و به شما امکان می‌دهد محتوا را از سرورهای خارجی و منابع دیگر در صفحات Wix خود نمایش دهید. به عنوان مثال، می‌توانید از ویجت‌های هواشناسی، تیک‌های سهام، تقویم‌ها یا هر عنصر وب سفارشی استفاده کنید. + +این راهنما شما را در فرآیند ادغام یک چت‌بات Dify در وب‌سایت Wix خود با استفاده از کد iframe راهنمایی می‌کند. این روش مشابه برای ادغام برنامه‌های Dify در سایر وب‌سایت‌ها، وبلاگ‌ها یا صفحات وب نیز قابل استفاده است. + +## 1. بدست آوردن کد اسنیپت iFrame برنامه Dify + +با فرض اینکه شما قبلاً یک [برنامه Dify AI](https://docs.dify.ai/guides/application-orchestrate/creating-an-application) ایجاد کرده‌اید، مراحل زیر را برای دریافت کد اسنیپت iFrame دنبال کنید: + +1. وارد حساب Dify خود شوید. +2. برنامه Dify که می‌خواهید آن را ادغام کنید، انتخاب کنید. +3. روی دکمه "Publish" در گوشه بالا سمت راست کلیک کنید. +4. در صفحه انتشار، گزینه "Embed Into Site" را انتخاب کنید. + + ![Embed Into Site Option](../../.gitbook/assets/best-practice-wix-2.png) +5. یک سبک مناسب را انتخاب کرده و کد iFrame نمایش داده شده را کپی کنید. به عنوان مثال: + + ![iFrame Code Example](../../.gitbook/assets/best-practice-wix-3.png) + +## 2. ادغام کد اسنیپت iFrame در سایت Wix شما + +1. وارد وب‌سایت Wix خود شوید و صفحه‌ای را که می‌خواهید ویرایش کنید، باز کنید. +2. روی دکمه آبی `+` (Add Elements) در سمت چپ صفحه کلیک کنید. +3. **Embed Code** را انتخاب کنید، سپس روی **Embed HTML** کلیک کنید تا یک عنصر HTML iFrame به صفحه اضافه شود. + + ![Add HTML iFrame](../../.gitbook/assets/best-practice-add-html-iframe.png) +4. در جعبه "HTML Settings"، گزینه "Code" را انتخاب کنید. +5. کد اسنیپت iFrame را که از برنامه Dify خود دریافت کرده‌اید، پیست کنید. +6. برای ذخیره و پیش‌نمایش تغییرات خود، روی دکمه **Update** کلیک کنید. + +در اینجا یک نمونه از کد اسنیپت iFrame برای ادغام یک چت‌بات Dify آورده شده است: + +```bash + +``` + +![Insert Dify iFrame Code](../../.gitbook/assets/best-practice-insert-dify-iframe-code.png) + +> ⚠️ مطمئن شوید که آدرس در کد iFrame با HTTPS شروع شود. آدرس‌های HTTP به درستی نمایش داده نمی‌شوند. + +## 3. سفارشی‌سازی چت‌بات Dify خود + +می‌توانید سبک دکمه، موقعیت و سایر تنظیمات چت‌بات Dify را تنظیم کنید. + +### 3.1 سفارشی‌سازی سبک + +ویژگی `style` را در کد iFrame تغییر دهید تا ظاهر دکمه Chatbot را سفارشی کنید. به عنوان مثال: + +```bash + + +# Adding a 2-pixel wide solid black border: border: 2px solid #000 + +→ + + +``` + +این کد یک حاشیه سیاه جامد 2 پیکسل به رابط کاربری چت‌بات اضافه می‌کند. + +### 3.2 سفارشی‌سازی موقعیت + +با تغییر مقدار `position` در ویژگی `style`، موقعیت دکمه را تنظیم کنید. به عنوان مثال: + +```bash + + +# Fixing the Chatbot to the bottom right corner of the webpage, 20 pixels from the bottom and right edges. + +→ + + +``` + +این کد چت‌بات را در گوشه پایین سمت راست صفحه وب، 20 پیکسل از لبه‌های پایین و راست ثابت می‌کند. + +## سؤالات متداول + +**1. محتوای iFrame نمایش داده نمی‌شود.** + +* تأیید کنید که URL با HTTPS شروع می‌شود. +* برای خطاهای تایپی در کد `iframe` جستجو کنید. +* تأیید کنید که محتوای ادغام شده با سیاست‌های امنیتی Wix مطابقت دارد. + +**2. محتوای iFrame بریده شده است.** + +برای حل مشکلات بریدگی محتوا، مقادیر درصد `width` و `height` را در کد `iframe` تغییر دهید. + + diff --git a/fa/policies/agreement/README.md b/fa/policies/agreement/README.md new file mode 100644 index 000000000..396917445 --- /dev/null +++ b/fa/policies/agreement/README.md @@ -0,0 +1,11 @@ +## امنیت داده + +ما به امنیت داده‌های شما بسیار اهمیت می‌دهیم و در حال دریافت گواهینامه‌های SOC2 و ISO27001 هستیم. + +برای اطلاعات جامع در مورد اقدامات و پروتکل‌های امنیتی Dify، لطفاً به [مرکز اعتماد Dify](https://security.dify.ai/) مراجعه کنید. مرکز اعتماد Dify باید به عنوان منبع اصلی و معتبر برای اطلاعات مربوط به امنیت در نظر گرفته شود. + +خدمات ابری Dify.AI در AWS در منطقه ایالات متحده میزبانی می‌شود. تنها تعداد بسیار محدودی از کارکنان مجاز، پس از تأیید، می‌توانند به داده‌های کاربر دسترسی داشته باشند. علاوه بر این، کد ما در GitHub متن‌باز است، بنابراین اگر نگرانی‌های امنیتی در مورد سرویس ابری دارید، می‌توانید از نسخه خودکار استفاده کنید. + +در نسخه خودکار Dify، فقط یک مورد وجود دارد که در آن سرور Dify فراخوانی می‌شود که برای بررسی API به‌روزرسانی نسخه فعلی است. این عمل باید توسط یک مدیر در پس‌زمینه انجام شود. هیچ فناوری دیگری از سرورهای از راه دور استفاده نمی‌کند، بنابراین می‌توانید از آن به طور امن استفاده کنید. + +اگر هنوز هم نگرانی دارید، می‌توانید با تنظیم دیواره‌های آتش و اقدامات امنیتی دیگر از داده‌های خود محافظت کنید. diff --git a/fa/policies/open-source.md b/fa/policies/open-source.md new file mode 100644 index 000000000..3f33e02d1 --- /dev/null +++ b/fa/policies/open-source.md @@ -0,0 +1,33 @@ +# مجوز منبع باز + +## مجوز منبع باز Dify + +پروژه Dify تحت مجوز Apache 2.0 مجوز داده شده است، با شرایط اضافی زیر: + +1. Dify مجاز به استفاده برای تجارت، مانند استفاده از Dify به عنوان "سرویس بک اند به عنوان سرویس" برای برنامه های دیگر شما، یا ارائه آن به شرکت ها به عنوان یک پلتفرم توسعه برنامه، است. با این حال، در صورت برآورده شدن شرایط زیر، باید با تولید کننده برای دریافت مجوز تجاری تماس بگیرید: + +* سرویس SaaS چند مستاجر: مگر اینکه به صراحت از طرف Dify به صورت کتبی مجاز شود، شما مجاز به استفاده از کد منبع Dify.AI برای راه اندازی یک سرویس SaaS چند مستاجر که شبیه به نسخه سرویس Dify.AI است، نیستید. +* اطلاعات LOGO و حق چاپ: در فرآیند استفاده از Dify، مجاز به حذف یا تغییر اطلاعات LOGO یا حق چاپ در کنسول Dify نیستید. + +لطفاً برای استعلام در مورد مسائل مربوط به مجوز از طریق ایمیل با business@dify.ai تماس بگیرید. + +2. به عنوان یک مشارکت کننده، باید موافقت کنید که کد مشارکت شده شما: + +* تولید کننده می تواند توافق نامه منبع باز را برای سختگیرتر یا آزادتر شدن تنظیم کند. +* می تواند برای اهداف تجاری، مانند تجارت ابری Dify، استفاده شود. + +به غیر از این، تمام حقوق و محدودیت های دیگر از مجوز Apache 2.0 پیروی می کنند. اگر به اطلاعات دقیق تری نیاز دارید، می توانید به نسخه کامل Apache License 2.0 مراجعه کنید. + +طراحی تعاملی این محصول توسط حق اختراع ظاهر محافظت می شود. + +© 2023 LangGenius, Inc. + +*** + +مجوز شده تحت مجوز Apache، نسخه 2.0 (مجوز " " " ) ؛ شما مجاز به استفاده از این فایل به جز در انطباق با مجوز نیستید. شما می توانید یک نسخه از مجوز را در اینجا دریافت کنید: + +``` +http://www.apache.org/licenses/LICENSE-2.0 +``` + +مگر اینکه توسط قانون قابل اجرا الزام شود یا به صورت کتبی توافق شود، نرم افزار توزیع شده تحت این مجوز با "همانطور که هست" توزیع می شود، بدون هیچ گونه ضمانت یا شرطی، صریح یا ضمنی. به مجوز برای زبان خاص حاکم بر مجوزها و محدودیت ها مراجعه کنید. diff --git a/fa/workshop/basic/README.md b/fa/workshop/basic/README.md new file mode 100644 index 000000000..21befe267 --- /dev/null +++ b/fa/workshop/basic/README.md @@ -0,0 +1,9 @@ +# مقدماتی + +به کارگاه Dify خوش آمدید! این آموزش‌ها برای مبتدیانی طراحی شده‌اند که می‌خواهند یادگیری Dify را از صفر شروع کنند. چه دانش برنامه‌نویسی یا هوش مصنوعی داشته باشید یا نه، ما شما را گام به گام راهنمایی می‌کنیم تا مفاهیم و کاربردهای اصلی Dify را بدون از دست دادن هیچ جزئیاتی یاد بگیرید. + +ما از طریق مجموعه‌ای از آزمایش‌ها به شما در درک Dify کمک خواهیم کرد. هر آزمایش شامل مراحل و توضیحات مفصلی خواهد بود تا مطمئن شویم که می‌توانید به راحتی مطالب را دنبال کرده و درک کنید. ما آموزش دانش را در آزمایش‌ها به هم می‌بافیم، به طوری که می‌توانید در عمل یاد بگیرید و به تدریج درک کاملی از Dify به دست آورید. + +نگران هیچ پیش‌نیازی نباشید! ما از ابتدایی‌ترین مفاهیم شروع می‌کنیم و به تدریج شما را به سمت مباحث پیشرفته‌تر راهنمایی می‌کنیم. چه کاملاً مبتدی باشید یا تجربه برنامه‌نویسی داشته باشید ولی بخواهید فن‌آوری هوش مصنوعی را یاد بگیرید، این آموزش همه چیزهایی که نیاز دارید را در اختیار شما قرار می‌دهد. + +بیایید با هم این سفر یادگیری را آغاز کنیم و احتمالات بی‌پایان Dify را کاوش کنیم! diff --git a/fa/workshop/basic/build-ai-image-generation-app.md b/fa/workshop/basic/build-ai-image-generation-app.md new file mode 100644 index 000000000..14ebd1736 --- /dev/null +++ b/fa/workshop/basic/build-ai-image-generation-app.md @@ -0,0 +1,180 @@ +# چطور یک برنامه‌ی هوش مصنوعی برای تولید تصویر بسازیم؟ + +> نویسنده: استیون لین. نویسنده‌ی فنی دایفی. + +با افزایش محبوبیت تولید تصویر، محصولات فوق‌العاده‌ای مثل دالی، فلکس، انتشار پایدار، و غیره پدیدار شده‌اند. + +در این مقاله، یاد می‌گیرید چطور با استفاده از دایفی، یک برنامه‌ی هوش مصنوعی برای تولید تصویر بسازید. + +![](../../.gitbook/assets/build-ai-image-generation-app-12-en.png) + +## یاد می‌گیرید + +* روش‌های ساخت یک عامل با استفاده از دایفی +* مفاهیم پایه‌ای عامل +* اصول اولیه‌ی مهندسی پروم‌پت +* استفاده از ابزار +* مفاهیم توهم مدل‌های بزرگ + +## ۱. تنظیم کلید API پایداری + +[اینجا را کلیک کنید](https://platform.stability.ai/account/keys) تا به صفحه‌ی مدیریت کلید API پایداری بروید. + +اگر هنوز ثبت نام نکرده‌اید، قبل از ورود به صفحه‌ی مدیریت API، از شما خواسته می‌شود که ثبت نام کنید. + +پس از ورود به صفحه‌ی مدیریت، برای کپی کردن کلید، روی `کپی` کلیک کنید. + +![](../../.gitbook/assets/build-ai-image-generation-app-1.png) + +سپس، باید این کلید را در [Dify - Tools - Stability](https://cloud.dify.ai/tools) با دنبال کردن این مراحل وارد کنید: + +* وارد دایفی شوید. +* وارد Tools شوید. +* Stability را انتخاب کنید. +* روی `مجوز` کلیک کنید. + + + +![](../../.gitbook/assets/build-ai-image-generation-app-2-en.png) + +* کلید را وارد کنید و ذخیره کنید. + +## ۲. تنظیم ارائه دهندگان مدل + +برای بهینه‌سازی تعامل، به یک LLM نیاز داریم تا دستورالعمل‌های کاربر را به طور مشخص، یعنی برای نوشتن پروم‌پت برای تولید تصاویر، مشخص کند. سپس، ارائه دهندگان مدل را در دایفی با دنبال کردن این مراحل تنظیم می‌کنیم. + +نسخه رایگان دایفی، ۲۰۰ اعتبار پیام رایگان OpenAI ارائه می‌دهد. + +اگر اعتبارات پیام کافی نیستند، می‌توانید با دنبال کردن مراحل نشان داده شده در تصویر زیر، سایر ارائه دهندگان مدل را سفارشی کنید: + +روی **آواتار شما - تنظیمات - ارائه دهنده مدل** کلیک کنید. + +
+ +اگر ارائه دهنده‌ی مدلی که می‌خواهید پیدا نکردید، پلتفرم groq اعتبارات تماس رایگان برای LLM ها مثل Llama ارائه می‌دهد. + +وارد [صفحه‌ی مدیریت API groq](https://console.groq.com/keys) شوید. + +روی **ایجاد کلید API** کلیک کنید، یک نام دلخواه را تنظیم کنید، و کلید API را کپی کنید. + +به **Dify - ارائه دهندگان مدل** برگردید، **groqcloud** را انتخاب کنید، و روی **تنظیم** کلیک کنید. + +![](../../.gitbook/assets/build-ai-image-generation-app-4-en.png) + +کلید API را چسبانده و ذخیره کنید. + +![](../../.gitbook/assets/build-ai-image-generation-app-5-en.png) + +## ۳. ساخت یک عامل + +به **Dify - Studio** برگردید، **ایجاد از خالی** را انتخاب کنید. + +![](../../.gitbook/assets/build-ai-image-generation-app-6-en.png) + +در این آزمایش، فقط باید با استفاده‌ی اساسی از عامل آشنا شویم. + +{% hint style="info" %} +**عامل چیست؟** + +یک عامل، یک سیستم هوش مصنوعی است که رفتار و قابلیت‌های انسان را شبیه‌سازی می‌کند. این سیستم از طریق پردازش زبان طبیعی با محیط تعامل برقرار می‌کند، اطلاعات ورودی را درک می‌کند و خروجی‌های متناظر را تولید می‌کند. عامل همچنین قابلیت‌های "درک" دارد، می‌تواند انواع مختلف داده‌ها را پردازش و تجزیه و تحلیل کند، و می‌تواند ابزارها و API‌های مختلف خارجی را برای انجام وظایف فراخوانی و استفاده کند، که دامنه‌ی عملکردی آن را گسترش می‌دهد. این طراحی به عامل اجازه می‌دهد تا به طور انعطاف‌پذیرتر با موقعیت‌های پیچیده کنار بیاید و تا حدودی تفکر و الگوهای رفتاری انسان را شبیه‌سازی کند. +{% endhint %} + +**عامل** را انتخاب کنید، نام آن را وارد کنید. + +![](../../.gitbook/assets/build-ai-image-generation-app-7-en.png) + +سپس، وارد رابط ارکستراسیون عامل می‌شوید که در زیر نشان داده شده است. + +![](../../.gitbook/assets/build-ai-image-generation-app-8-en.png) + +LLM را انتخاب کنید. در اینجا، ما از Llama-3.1-70B که توسط groq ارائه شده، به عنوان مثال استفاده می‌کنیم: + +![](../../.gitbook/assets/build-ai-image-generation-app-9-en.png) + +Stability را در **Tools** انتخاب کنید: + +![](../../.gitbook/assets/build-ai-image-generation-app-10-en.png) + +![](../../.gitbook/assets/build-ai-image-generation-app-11-en.png) + +### نوشتن پروم‌پت‌ها + +پروم‌پت‌ها روح عامل هستند و به طور مستقیم بر اثر خروجی تاثیر می‌گذارند. به طور کلی، هرچه پروم‌پت‌ها دقیق‌تر باشند، خروجی بهتر خواهد بود، اما پروم‌پت‌های بیش از حد طولانی نیز می‌تواند منجر به اثرات منفی شود. + +مهندسی تنظیم پروم‌پت‌ها، مهندسی پروم‌پت نامیده می‌شود. + +در این آزمایش، نیازی نیست نگران عدم تسلط بر مهندسی پروم‌پت باشید. ما بعداً به تدریج آن را یاد می‌گیریم. + +با ساده‌ترین پروم‌پت‌ها شروع می‌کنیم: + +``` +با استفاده از stability_text2image، محتوای مشخص شده را با توجه به پروم‌پت کاربر بکشید. +``` + +هر بار که کاربر یک دستور را وارد می‌کند، عامل این دستورالعمل سطح سیستم را می‌شناسد، در نتیجه می‌فهمد که هنگام اجرای یک وظیفه‌ی نقاشی توسط کاربر، باید ابزار stability را فراخوانی کند. + +به عنوان مثال: یک دختر را بکشید که یک کتاب باز در دست دارد. + +![](../../.gitbook/assets/build-ai-image-generation-app-12-en.png) + +### آیا نمی‌خواهید پروم‌پت بنویسید؟ البته که می‌توانید! + +روی **تولید** در گوشه‌ی بالا سمت راست Instructions کلیک کنید. + +![](../../.gitbook/assets/prompt-gen-1-en.png) + +نیازهای خود را در **Instructions** وارد کنید و روی **تولید** کلیک کنید. پروم‌پت‌های تولید شده در سمت راست، پروم‌پت‌های تولید شده توسط هوش مصنوعی را نشان می‌دهند. + +![](../../.gitbook/assets/prompt-gen-2-en.png) + +با این حال، برای درک بهتر پروم‌پت‌ها، نباید در مراحل اولیه به این ویژگی تکیه کنیم. + +## انتشار + +روی دکمه‌ی انتشار در گوشه‌ی بالا سمت راست کلیک کنید، و بعد از انتشار، **اجرای برنامه** را انتخاب کنید تا یک صفحه‌ی وب برای یک عامل در حال اجرا به صورت آنلاین دریافت کنید. + +![](../../.gitbook/assets/build-ai-image-generation-app-13-en.png) + +URL این صفحه‌ی وب را برای اشتراک گذاری با دوستان دیگر کپی کنید. + +## سوال ۱: چطور می‌توان سبک تصاویر تولید شده را مشخص کرد؟ + +می‌توانیم دستورالعمل‌های سبک را در دستور ورودی کاربر اضافه کنیم، به عنوان مثال: سبک انیمه، یک دختر را بکشید که یک کتاب باز در دست دارد. + +![](../../.gitbook/assets/build-ai-image-generation-app-14-en.png) + +اما اگر می‌خواهیم سبک پیش فرض را به سبک انیمه تنظیم کنیم، می‌توانیم آن را به پروم‌پت سیستم اضافه کنیم زیرا قبلاً یاد گرفتیم که پروم‌پت سیستم هر بار که دستور کاربر اجرا می‌شود شناخته شده است و اولویت بالاتری دارد. + +``` +با استفاده از stability_text2image، محتوای مشخص شده را با توجه به پروم‌پت کاربر بکشید، تصویر به سبک انیمه است. +``` + +## سوال ۲: چطور می‌توان درخواست‌های خاص را از برخی کاربران رد کرد؟ + +در بسیاری از سناریوهای تجاری، باید از خروجی برخی محتواهای غیرمنطقی جلوگیری کنیم، اما LLM ها اغلب "احمق" هستند و بدون هیچ سؤالی از دستورالعمل‌های کاربر پیروی می‌کنند، حتی اگر محتوای خروجی اشتباه باشد. این پدیده که مدل با تلاش برای پاسخ دادن به کاربران با ساختن محتوای غلط، به اصطلاح **توهم مدل** نامیده می‌شود. بنابراین، لازم است که مدل در صورت لزوم درخواست‌های کاربر را رد کند. + +علاوه بر این، ممکن است کاربران برخی از محتواها را که ارتباطی با تجارت ندارد، درخواست کنند و ما نیز باید عامل را وادار کنیم که چنین درخواست‌هایی را رد کند. + +می‌توانیم از قالب markdown برای دسته‌بندی پروم‌پت‌های مختلف استفاده کنیم و پروم‌پت‌هایی که به عامل می‌آموزند که درخواست‌های غیرمنطقی را رد کند، را در عنوان "محدودیت‌ها" بنویسیم. البته، این قالب فقط برای استانداردسازی است و شما می‌توانید قالب خود را داشته باشید. + +``` +## وظیفه +با استفاده از stability_text2image، محتوای مشخص شده را با توجه به پروم‌پت کاربر بکشید، تصویر به سبک انیمه است. + +## محدودیت‌ها +اگر کاربر محتوایی را درخواست کرد که مربوط به نقاشی نیست، پاسخ دهید: "متاسفم، نمی‌فهمم چه می‌گویی." +``` + +به عنوان مثال، بیایید بپرسیم: امشب شام چی داریم؟ + + + +
+ +در برخی سناریوهای تجاری رسمی‌تر، می‌توانیم از یک کتابخانه‌ی کلمات حساس برای رد درخواست‌های کاربر استفاده کنیم. + +کلمه‌ی کلیدی "شام" را در **افزودن ویژگی - تعدیل محتوا** اضافه کنید. وقتی کاربر کلمه‌ی کلیدی را وارد می‌کند، برنامه‌ی عامل "متاسفم، نمی‌فهمم چه می‌گویی" را خروجی می‌دهد. + +![](../../.gitbook/assets/build-ai-image-generation-app-16-en.png) + + diff --git a/fa/workshop/intermediate/README.md b/fa/workshop/intermediate/README.md new file mode 100644 index 000000000..5b9dea38a --- /dev/null +++ b/fa/workshop/intermediate/README.md @@ -0,0 +1 @@ +# متوسط diff --git a/fa/workshop/intermediate/twitter-chatflow.md b/fa/workshop/intermediate/twitter-chatflow.md new file mode 100644 index 000000000..af0893f83 --- /dev/null +++ b/fa/workshop/intermediate/twitter-chatflow.md @@ -0,0 +1,164 @@ +--- +cover: ../../.gitbook/assets/%E7%94%BB%E6%9D%BF_1.png +coverY: 0 +--- + +# با استفاده از عامل گفتگو، تجزیه و تحلیل حساب کاربری توییتر را تولید کنید + +## مقدمه + +در Dify، شما می توانید از ابزارهای خزنده مانند Jina استفاده کنید که می توانند صفحات وب را به فرمت Markdown تبدیل کنند تا مدل های زبانی بزرگ بتوانند آن را بخوانند. + +به تازگی، [wordware.ai](https://www.wordware.ai/) توجه ما را به این نکته جلب کرده است که می توانیم از خزنده ها برای جمع آوری داده از شبکه های اجتماعی برای تجزیه و تحلیل توسط مدل های زبانی بزرگ استفاده کنیم و برنامه های کاربردی جالب تری ایجاد کنیم. + +با این حال، با توجه به اینکه X (که قبلاً توییتر بود) از تاریخ 2 فوریه 2023 دسترسی رایگان API خود را متوقف کرده است و از آن زمان اقدامات ضد خزنده خود را ارتقا داده است. ابزارهایی مانند Jina نمی توانند به طور مستقیم به محتوای X دسترسی داشته باشند. + +> از 9 فوریه، ما دیگر از دسترسی رایگان به API توییتر، هم v2 و هم v1.1 پشتیبانی نخواهیم کرد. در عوض، یک سطوح پایه پولی در دسترس خواهد بود. 🧵 +> +> — Developers (@XDevelopers) [فوریه 2، 2023](https://twitter.com/XDevelopers/status/1621026986784337922?ref\_src=twsrc%5Etfw) + +خوشبختانه، Dify همچنین دارای یک ابزار HTTP است که به ما امکان می دهد با ارسال درخواست های HTTP، ابزارهای خزنده خارجی را فراخوانی کنیم. بیایید شروع کنیم! + +## **پیش نیازها** + +### ثبت Crawlbase + +Crawlbase یک پلتفرم جمع آوری و خراشیدن داده همه کاره برای کسب و کارها و توسعه دهندگان است. + +علاوه بر این، با استفاده از Crawlbase Scraper، می توانید داده ها را از پلتفرم های اجتماعی مانند X، فیسبوک و اینستاگرام جمع آوری کنید. + +برای ثبت نام کلیک کنید: [crawlbase.com](https://crawlbase.com) + +### استقرار محلی Dify + +Dify یک پلتفرم توسعه برنامه های کاربردی مدل های زبانی بزرگ منبع باز است. شما می توانید سرویس ابری را انتخاب کنید یا آن را با استفاده از docker compose به صورت محلی استقرار دهید. + +در این مقاله، اگر نمی خواهید آن را به صورت محلی استقرار دهید، یک حساب کاربری رایگان Dify Cloud sandbox را در اینجا ثبت نام کنید: [https://cloud.dify.ai/signin](https://cloud.dify.ai/signin). + +{% hint style="info" %} +کاربران Dify Cloud Sandbox 200 اعتبار رایگان دریافت می کنند که معادل 200 پیام GPT-3.5 یا 20 پیام GPT-4 است. +{% endhint %} + +در ادامه، آموزش های کوتاهی در مورد نحوه استقرار Dify ارائه شده است: + +#### کلون Dify + +```bash +git clone https://github.com/langgenius/dify.git +``` + +#### **شروع Dify** + +```bash +cd dify/docker +cp .env.example .env +docker compose up -d +``` + +### پیکربندی ارائه دهندگان مدل های زبانی بزرگ + +ارائه دهنده مدل را در تنظیمات حساب پیکربندی کنید: + +
+ +## یک جریان گفتگو ایجاد کنید + +اکنون، بیایید روی جریان گفتگو شروع به کار کنیم. + +برای شروع، روی `ایجاد از خالِص` کلیک کنید: + +
+ +جریان گفتگوی آغازین باید شبیه به این باشد: + +
+ +## گره ها را به جریان گفتگو اضافه کنید + +

جریان گفتگوی نهایی به این صورت است

+ +### گره شروع + +در گره شروع، می توانیم در ابتدای یک گفتگو، برخی از متغیرهای سیستم را اضافه کنیم. در این مقاله، به یک شناسه کاربری توییتر به عنوان یک متغیر رشته ای نیاز داریم. بیایید آن را `id` نامگذاری کنیم. + +روی گره شروع کلیک کنید و یک متغیر جدید اضافه کنید: + +
+ +### گره کد + +مطابق با [اسناد Crawlbase](https://crawlbase.com/docs/crawling-api/scrapers/#twitter-profile)، متغیر `url` (که در گره بعدی استفاده خواهد شد) باید `https://twitter.com/` + `شناسه کاربری` باشد، مانند `https://twitter.com/elonmusk` برای ایلان ماسک. + +برای تبدیل شناسه کاربری به یک URL کامل، می توانیم از کد پایتون زیر برای ادغام پیشوند `https://twitter.com/` با شناسه کاربری استفاده کنیم: + +```python +def main(id: str) -> dict: + return { + "url": "https://twitter.com/"+id, + } +``` + +یک گره کد اضافه کنید و پایتون را انتخاب کنید و نام متغیرهای ورودی و خروجی را تنظیم کنید: + +
+ +### گره درخواست HTTP + +بر اساس [اسناد Crawlbase](https://crawlbase.com/docs/crawling-api/scrapers/#twitter-profile)، برای خراشیدن پروفایل یک کاربر توییتر در قالب http، باید گره درخواست HTTP را به فرمت زیر تکمیل کنیم: + +
+ +مهم است که به دلایل امنیتی، بهتر است مقدار توکن را به صورت متن ساده وارد نکنید، زیرا این کار یک روش خوب نیست. در واقع، در آخرین نسخه Dify، می توانیم مقدار توکن را در **`متغیرهای محیطی`** تنظیم کنیم. برای تنظیم مقدار توکن، روی `env` - `اضافه کردن متغیر` کلیک کنید، بنابراین متن ساده در گره ظاهر نمی شود. + +برای کلید API Crawlbase خود، [https://crawlbase.com/dashboard/account/docs](https://crawlbase.com/dashboard/account/docs) را بررسی کنید. + +
+ +با تایپ `/` ، می توانید به راحتی کلید API را به عنوان یک متغیر وارد کنید. + +
+ +برای بررسی اینکه آیا به درستی کار می کند، روی دکمه شروع این گره ضربه بزنید: + +
+ +### گره مدل زبانی بزرگ + +اکنون، می توانیم از مدل زبانی بزرگ برای تجزیه و تحلیل نتیجه جمع آوری شده توسط crawlbase و اجرای دستور خود استفاده کنیم. + +مقدار `context` باید `body` از گره درخواست HTTP باشد. + +در ادامه یک نمونه سیستم پرومپت ارائه شده است. + +
+ +## تست اجرا + +برای شروع یک تست اجرا، روی `پیش نمایش` کلیک کنید و شناسه کاربری توییتر را در `id` وارد کنید. + +
+ +به عنوان مثال، من می خواهم توییت های ایلان ماسک را تجزیه و تحلیل کنم و یک توییت در مورد گرم شدن کره زمین با لحن او بنویسم. + +
+ +آیا این مثل ایلان به نظر می رسد؟ lol + +در گوشه بالا سمت راست روی `انتشار` کلیک کنید و آن را به وب سایت خود اضافه کنید. + +خوش بگذره! + +## در نهایت… + +### خزنده های دیگر X(توییتر) + +در این مقاله، من Crawlbase را معرفی کردم. باید ارزان ترین سرویس جمع آوری داده های توییتر موجود باشد، اما گاهی اوقات نمی تواند محتوای توییت های کاربران را به درستی جمع آوری کند. + +سرویس جمع آوری داده های توییتر مورد استفاده توسط [wordware.ai](http://wordware.ai) که قبلاً ذکر شد، **Tweet Scraper V2** است، اما اشتراک برای پلتفرم میزبانی شده **apify** 49 دلار در ماه است. + +## لینک ها + +* [X@dify\_ai](https://x.com/dify\_ai) +* مخزن Dify در GitHub:[https://github.com/langgenius/dify](https://github.com/langgenius/dify) + +