Thật tuyệt vời khi bạn muốn đóng góp cho Dify! Chúng tôi rất mong chờ được thấy những gì bạn sẽ làm. Là một startup với nguồn nhân lực và tài chính hạn chế, chúng tôi có tham vọng lớn là thiết kế quy trình trực quan nhất để xây dựng và quản lý các ứng dụng LLM. Mọi sự giúp đỡ từ cộng đồng đều rất quý giá đối với chúng tôi.
Chúng tôi cần linh hoạt và làm việc nhanh chóng, nhưng đồng thời cũng muốn đảm bảo các cộng tác viên như bạn có trải nghiệm đóng góp thuận lợi nhất có thể. Chúng tôi đã tạo ra hướng dẫn đóng góp này nhằm giúp bạn làm quen với codebase và cách chúng tôi làm việc với các cộng tác viên, để bạn có thể nhanh chóng bắt tay vào phần thú vị.
Hướng dẫn này, cũng như bản thân Dify, đang trong quá trình cải tiến liên tục. Chúng tôi rất cảm kích sự thông cảm của bạn nếu đôi khi nó không theo kịp dự án thực tế, và chúng tôi luôn hoan nghênh mọi phản hồi để cải thiện.
Về vấn đề cấp phép, xin vui lòng dành chút thời gian đọc qua [Thỏa thuận Cấp phép và Đóng góp](./LICENSE) ngắn gọn của chúng tôi. Cộng đồng cũng tuân thủ [quy tắc ứng xử](https://github.com/langgenius/.github/blob/main/CODE_OF_CONDUCT.md).
## Trước khi bắt đầu
[Tìm kiếm](https://github.com/langgenius/dify/issues?q=is:issue+is:closed) một vấn đề hiện có, hoặc [tạo mới](https://github.com/langgenius/dify/issues/new/choose) một vấn đề. Chúng tôi phân loại các vấn đề thành 2 loại:
### Yêu cầu tính năng:
* Nếu bạn đang tạo một yêu cầu tính năng mới, chúng tôi muốn bạn giải thích tính năng đề xuất sẽ đạt được điều gì và cung cấp càng nhiều thông tin chi tiết càng tốt. [@perzeusss](https://github.com/perzeuss) đã tạo một [Trợ lý Yêu cầu Tính năng](https://udify.app/chat/MK2kVSnw1gakVwMX) rất hữu ích để giúp bạn soạn thảo nhu cầu của mình. Hãy thử dùng nó nhé.
* Nếu bạn muốn chọn một vấn đề từ danh sách hiện có, chỉ cần để lại bình luận dưới vấn đề đó nói rằng bạn sẽ làm.
Một thành viên trong nhóm làm việc trong lĩnh vực liên quan sẽ được thông báo. Nếu mọi thứ ổn, họ sẽ cho phép bạn bắt đầu code. Chúng tôi yêu cầu bạn chờ đợi cho đến lúc đó trước khi bắt tay vào làm tính năng, để không lãng phí công sức của bạn nếu chúng tôi đề xuất thay đổi.
Tùy thuộc vào lĩnh vực mà tính năng đề xuất thuộc về, bạn có thể nói chuyện với các thành viên khác nhau trong nhóm. Dưới đây là danh sách các lĩnh vực mà các thành viên trong nhóm chúng tôi đang làm việc hiện tại:
| [@yeuoly](https://github.com/Yeuoly) | Thiết kế kiến trúc Agents |
| [@jyong](https://github.com/JohnJyong) | Thiết kế quy trình RAG |
| [@GarfieldDai](https://github.com/GarfieldDai) | Xây dựng quy trình làm việc |
| [@iamjoel](https://github.com/iamjoel) & [@zxhlyh](https://github.com/zxhlyh) | Làm cho giao diện người dùng dễ sử dụng |
| [@guchenhe](https://github.com/guchenhe) & [@crazywoola](https://github.com/crazywoola) | Trải nghiệm nhà phát triển, đầu mối liên hệ cho mọi vấn đề |
| [@takatost](https://github.com/takatost) | Định hướng và kiến trúc tổng thể sản phẩm |
| Tính năng ưu tiên cao được gắn nhãn bởi thành viên trong nhóm | Ưu tiên cao |
| Yêu cầu tính năng phổ biến từ [bảng phản hồi cộng đồng](https://github.com/langgenius/dify/discussions/categories/feedbacks) của chúng tôi | Ưu tiên trung bình |
| Tính năng không quan trọng và cải tiến nhỏ | Ưu tiên thấp |
| Có giá trị nhưng không cấp bách | Tính năng tương lai |
### Những vấn đề khác (ví dụ: báo cáo lỗi, tối ưu hiệu suất, sửa lỗi chính tả):
- [npm](https://www.npmjs.com/) phiên bản 8.x.x hoặc [Yarn](https://yarnpkg.com/)
- [Python](https://www.python.org/) phiên bản 3.10.x
### 4. Cài đặt
Dify bao gồm một backend và một frontend. Đi đến thư mục backend bằng lệnh `cd api/`, sau đó làm theo hướng dẫn trong [README của Backend](api/README.md) để cài đặt. Trong một terminal khác, đi đến thư mục frontend bằng lệnh `cd web/`, sau đó làm theo hướng dẫn trong [README của Frontend](web/README.md) để cài đặt.
Kiểm tra [FAQ về cài đặt](https://docs.dify.ai/learn-more/faq/self-host-faq) để xem danh sách các vấn đề thường gặp và các bước khắc phục.
### 5. Truy cập Dify trong trình duyệt của bạn
Để xác nhận cài đặt của bạn, hãy truy cập [http://localhost:3000](http://localhost:3000) (địa chỉ mặc định, hoặc URL và cổng bạn đã cấu hình) trong trình duyệt. Bạn sẽ thấy Dify đang chạy.
## Phát triển
Nếu bạn đang thêm một nhà cung cấp mô hình, [hướng dẫn này](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/README.md) dành cho bạn.
Nếu bạn đang thêm một nhà cung cấp công cụ cho Agent hoặc Workflow, [hướng dẫn này](./api/core/tools/README.md) dành cho bạn.
Để giúp bạn nhanh chóng định hướng phần đóng góp của mình, dưới đây là một bản phác thảo ngắn gọn về cấu trúc backend & frontend của Dify:
### Backend
Backend của Dify được viết bằng Python sử dụng [Flask](https://flask.palletsprojects.com/en/3.0.x/). Nó sử dụng [SQLAlchemy](https://www.sqlalchemy.org/) cho ORM và [Celery](https://docs.celeryq.dev/en/stable/getting-started/introduction.html) cho hàng đợi tác vụ. Logic xác thực được thực hiện thông qua Flask-login.
```
[api/]
├── constants // Các cài đặt hằng số được sử dụng trong toàn bộ codebase.
├── controllers // Định nghĩa các route API và logic xử lý yêu cầu.
├── core // Điều phối ứng dụng cốt lõi, tích hợp mô hình và công cụ.
├── docker // Cấu hình liên quan đến Docker & containerization.
├── events // Xử lý và xử lý sự kiện
├── extensions // Mở rộng với các framework/nền tảng bên thứ 3.
├── fields // Định nghĩa trường cho serialization/marshalling.
├── libs // Thư viện và tiện ích có thể tái sử dụng.
├── migrations // Script cho việc di chuyển cơ sở dữ liệu.
├── models // Mô hình cơ sở dữ liệu & định nghĩa schema.
├── services // Xác định logic nghiệp vụ.
├── storage // Lưu trữ khóa riêng tư.
├── tasks // Xử lý các tác vụ bất đồng bộ và công việc nền.
└── tests
```
### Frontend
Website được khởi tạo trên boilerplate [Next.js](https://nextjs.org/) bằng Typescript và sử dụng [Tailwind CSS](https://tailwindcss.com/) cho styling. [React-i18next](https://react.i18next.com/) được sử dụng cho việc quốc tế hóa.
```
[web/]
├── app // layouts, pages và components
│ ├── (commonLayout) // layout chung được sử dụng trong toàn bộ ứng dụng
│ ├── (shareLayout) // layouts được chia sẻ cụ thể cho các phiên dựa trên token
│ ├── activate // trang kích hoạt
│ ├── components // được chia sẻ bởi các trang và layouts
│ ├── install // trang cài đặt
│ ├── signin // trang đăng nhập
│ └── styles // styles được chia sẻ toàn cục
├── assets // Tài nguyên tĩnh
├── bin // scripts chạy ở bước build
├── config // cài đặt và tùy chọn có thể điều chỉnh
├── context // contexts được chia sẻ bởi các phần khác nhau của ứng dụng
├── dictionaries // File dịch cho từng ngôn ngữ
├── docker // cấu hình container
├── hooks // Hooks có thể tái sử dụng
├── i18n // Cấu hình quốc tế hóa
├── models // mô tả các mô hình dữ liệu & hình dạng của phản hồi API
├── public // tài nguyên meta như favicon
├── service // xác định hình dạng của các hành động API
├── test
├── types // mô tả các tham số hàm và giá trị trả về
└── utils // Các hàm tiện ích được chia sẻ
```
## Gửi PR của bạn
Cuối cùng, đã đến lúc mở một pull request (PR) đến repository của chúng tôi. Đối với các tính năng lớn, chúng tôi sẽ merge chúng vào nhánh `deploy/dev` để kiểm tra trước khi đưa vào nhánh `main`. Nếu bạn gặp vấn đề như xung đột merge hoặc không biết cách mở pull request, hãy xem [hướng dẫn về pull request của GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests).
Và thế là xong! Khi PR của bạn được merge, bạn sẽ được giới thiệu là một người đóng góp trong [README](https://github.com/langgenius/dify/blob/main/README.md) của chúng tôi.
## Nhận trợ giúp
Nếu bạn gặp khó khăn hoặc có câu hỏi cấp bách trong quá trình đóng góp, hãy đặt câu hỏi của bạn trong vấn đề GitHub liên quan, hoặc tham gia [Discord](https://discord.gg/8Tpq4AcN9c) của chúng tôi để trò chuyện nhanh chóng.
data: {"event": "agent_thought", "id": "67a99dc1-4f82-42d3-b354-18d4594840c8", "task_id": "9cf1ddd7-f94b-459b-b942-b77b26c59e9b", "message_id": "1fb10045-55fd-4040-99e6-d048d07cbad3", "position": 2, "thought": "I have created an image of a cute Japanese anime girl with white hair and blue eyes wearing a bunny girl suit.", "observation": "", "tool": "", "tool_input": "", "created_at": 1705639511, "message_files": [], "conversation_id": "c216c595-2d89-438c-b33c-aae5ddddd142"}
docsFailedNotice:'Dokumente konnten nicht indiziert werden',
retry:'Wiederholen',
indexingTechnique:{
high_quality:'HQ',
economy:'ECO',
},
indexingMethod:{
semantic_search:'VEKTOR',
full_text_search:'VOLLTEXT',
hybrid_search:'HYBRID',
invertedIndex:'INVERTIERT',
},
mixtureHighQualityAndEconomicTip:'Für die Mischung von hochwertigen und wirtschaftlichen Wissensbasen ist das Rerank-Modell erforderlich.',
inconsistentEmbeddingModelTip:'Das Rerank-Modell ist erforderlich, wenn die Embedding-Modelle der ausgewählten Wissensbasen inkonsistent sind.',
retrievalSettings:'Abrufeinstellungen',
rerankSettings:'Rerank-Einstellungen',
weightedScore:{
title:'Gewichtete Bewertung',
description:'Durch Anpassung der zugewiesenen Gewichte bestimmt diese Rerank-Strategie, ob semantische oder Schlüsselwort-Übereinstimmung priorisiert werden soll.',
semanticFirst:'Semantik zuerst',
keywordFirst:'Schlüsselwort zuerst',
customized:'Angepasst',
semantic:'Semantisch',
keyword:'Schlüsselwort',
},
nTo1RetrievalLegacy:'N-zu-1-Abruf wird ab September offiziell eingestellt. Es wird empfohlen, den neuesten Multi-Pfad-Abruf zu verwenden, um bessere Ergebnisse zu erzielen.',
nTo1RetrievalLegacyLink:'Mehr erfahren',
nTo1RetrievalLegacyLinkText:'N-zu-1-Abruf wird im September offiziell eingestellt.',
docsFailedNotice:'no se pudieron indexar los documentos',
retry:'Reintentar',
indexingTechnique:{
high_quality:'AC',
economy:'ECO',
},
indexingMethod:{
semantic_search:'VECTOR',
full_text_search:'TEXTO COMPLETO',
hybrid_search:'HÍBRIDO',
invertedIndex:'INVERTIDO',
},
mixtureHighQualityAndEconomicTip:'Se requiere el modelo de reclasificación para la mezcla de bases de conocimiento de alta calidad y económicas.',
inconsistentEmbeddingModelTip:'Se requiere el modelo de reclasificación si los modelos de incrustación de las bases de conocimiento seleccionadas son inconsistentes.',
retrievalSettings:'Configuración de recuperación',
rerankSettings:'Configuración de reclasificación',
weightedScore:{
title:'Puntuación ponderada',
description:'Al ajustar los pesos asignados, esta estrategia de reclasificación determina si se debe priorizar la coincidencia semántica o de palabras clave.',
semanticFirst:'Semántica primero',
keywordFirst:'Palabra clave primero',
customized:'Personalizado',
semantic:'Semántico',
keyword:'Palabra clave',
},
nTo1RetrievalLegacy:'La recuperación N-a-1 será oficialmente obsoleta a partir de septiembre. Se recomienda utilizar la última recuperación de múltiples rutas para obtener mejores resultados.',
nTo1RetrievalLegacyLink:'Más información',
nTo1RetrievalLegacyLinkText:'La recuperación N-a-1 será oficialmente obsoleta en septiembre.',
docsFailedNotice:'Les documents n\'ont pas pu être indexés',
retry:'Réessayer',
indexingTechnique:{
high_quality:'HQ',
economy:'ÉCO',
},
indexingMethod:{
semantic_search:'VECTEUR',
full_text_search:'TEXTE INTÉGRAL',
hybrid_search:'HYBRIDE',
invertedIndex:'INVERSÉ',
},
mixtureHighQualityAndEconomicTip:'Le modèle de reclassement est nécessaire pour le mélange de bases de connaissances de haute qualité et économiques.',
inconsistentEmbeddingModelTip:'Le modèle de reclassement est nécessaire si les modèles d\'incorporation des bases de connaissances sélectionnées sont incohérents.',
retrievalSettings:'Paramètres de récupération',
rerankSettings:'Paramètres de reclassement',
weightedScore:{
title:'Score pondéré',
description:'En ajustant les poids attribués, cette stratégie de reclassement détermine s\'il faut prioriser la correspondance sémantique ou par mots-clés.',
semanticFirst:'Sémantique d\'abord',
keywordFirst:'Mot-clé d\'abord',
customized:'Personnalisé',
semantic:'Sémantique',
keyword:'Mot-clé',
},
nTo1RetrievalLegacy:'La récupération N-à-1 sera officiellement obsolète à partir de septembre. Il est recommandé d\'utiliser la dernière récupération multi-chemins pour obtenir de meilleurs résultats.',
nTo1RetrievalLegacyLink:'En savoir plus',
nTo1RetrievalLegacyLinkText:'La récupération N-à-1 sera officiellement obsolète en septembre.',
docsFailedNotice:'दस्तावेज़ों को अनुक्रमित करने में विफल',
retry:'पुनः प्रयास करें',
indexingTechnique:{
high_quality:'उच्च गुणवत्ता',
economy:'किफायती',
},
indexingMethod:{
semantic_search:'वेक्टर',
full_text_search:'पूर्ण पाठ',
hybrid_search:'हाइब्रिड',
invertedIndex:'उल्टा',
},
mixtureHighQualityAndEconomicTip:'उच्च गुणवत्ता और किफायती ज्ञान आधारों के मिश्रण के लिए पुनः रैंकिंग मॉडल आवश्यक है।',
inconsistentEmbeddingModelTip:'यदि चयनित ज्ञान आधारों के एम्बेडिंग मॉडल असंगत हैं, तो पुनः रैंकिंग मॉडल आवश्यक है।',
retrievalSettings:'पुनर्प्राप्ति सेटिंग्स',
rerankSettings:'पुनः रैंकिंग सेटिंग्स',
weightedScore:{
title:'भारित स्कोर',
description:'आवंटित भारों को समायोजित करके, यह पुनः रैंकिंग रणनीति निर्धारित करती है कि शब्दार्थ या कीवर्ड मिलान को प्राथमिकता दी जाए।',
semanticFirst:'शब्दार्थ पहले',
keywordFirst:'कीवर्ड पहले',
customized:'अनुकूलित',
semantic:'शब्दार्थ',
keyword:'कीवर्ड',
},
nTo1RetrievalLegacy:'N-से-1 पुनर्प्राप्ति सितंबर से आधिकारिक तौर पर बंद कर दी जाएगी। बेहतर परिणाम प्राप्त करने के लिए नवीनतम बहु-मार्ग पुनर्प्राप्ति का उपयोग करने की सिफारिश की जाती है।',
nTo1RetrievalLegacyLink:'और जानें',
nTo1RetrievalLegacyLinkText:'N-से-1 पुनर्प्राप्ति सितंबर में आधिकारिक तौर पर बंद कर दी जाएगी।',
docsFailedNotice:'documenti non riusciti a essere indicizzati',
retry:'Riprova',
indexingTechnique:{
high_quality:'AQ',
economy:'ECO',
},
indexingMethod:{
semantic_search:'VETTORE',
full_text_search:'TESTO COMPLETO',
hybrid_search:'IBRIDO',
invertedIndex:'INVERTITO',
},
mixtureHighQualityAndEconomicTip:'Il modello di riclassificazione è necessario per la miscela di basi di conoscenza di alta qualità ed economiche.',
inconsistentEmbeddingModelTip:'Il modello di riclassificazione è necessario se i modelli di embedding delle basi di conoscenza selezionate sono incoerenti.',
retrievalSettings:'Impostazioni di recupero',
rerankSettings:'Impostazioni di riclassificazione',
weightedScore:{
title:'Punteggio ponderato',
description:'Regolando i pesi assegnati, questa strategia di riclassificazione determina se dare priorità alla corrispondenza semantica o per parole chiave.',
semanticFirst:'Semantica prima',
keywordFirst:'Parola chiave prima',
customized:'Personalizzato',
semantic:'Semantico',
keyword:'Parola chiave',
},
nTo1RetrievalLegacy:'Il recupero N-a-1 sarà ufficialmente deprecato da settembre. Si consiglia di utilizzare il più recente recupero multi-percorso per ottenere risultati migliori.',
nTo1RetrievalLegacyLink:'Scopri di più',
nTo1RetrievalLegacyLinkText:'Il recupero N-a-1 sarà ufficialmente deprecato a settembre.',
docsFailedNotice:'nie udało się zindeksować dokumentów',
retry:'Ponów',
indexingTechnique:{
high_quality:'WJ',
economy:'EKO',
},
indexingMethod:{
semantic_search:'WEKTOR',
full_text_search:'PEŁNY TEKST',
hybrid_search:'HYBRYDOWY',
invertedIndex:'ODWRÓCONY',
},
mixtureHighQualityAndEconomicTip:'Model ponownego rankingu jest wymagany dla mieszanki wysokiej jakości i ekonomicznych baz wiedzy.',
inconsistentEmbeddingModelTip:'Model ponownego rankingu jest wymagany, jeśli modele osadzania wybranych baz wiedzy są niespójne.',
retrievalSettings:'Ustawienia wyszukiwania',
rerankSettings:'Ustawienia ponownego rankingu',
weightedScore:{
title:'Ważona ocena',
description:'Poprzez dostosowanie przypisanych wag, ta strategia ponownego rankingu określa, czy priorytetowo traktować dopasowanie semantyczne czy słów kluczowych.',
semanticFirst:'Najpierw semantyczne',
keywordFirst:'Najpierw słowa kluczowe',
customized:'Dostosowane',
semantic:'Semantyczne',
keyword:'Słowo kluczowe',
},
nTo1RetrievalLegacy:'Wyszukiwanie N-do-1 zostanie oficjalnie wycofane od września. Zaleca się korzystanie z najnowszego wyszukiwania wielościeżkowego, aby uzyskać lepsze wyniki.',
nTo1RetrievalLegacyLink:'Dowiedz się więcej',
nTo1RetrievalLegacyLinkText:'Wyszukiwanie N-do-1 zostanie oficjalnie wycofane we wrześniu.',
docsFailedNotice:'documentos falharam ao serem indexados',
retry:'Tentar novamente',
indexingTechnique:{
high_quality:'AQ',
economy:'ECO',
},
indexingMethod:{
semantic_search:'VETOR',
full_text_search:'TEXTO COMPLETO',
hybrid_search:'HÍBRIDO',
invertedIndex:'INVERTIDO',
},
mixtureHighQualityAndEconomicTip:'O modelo de reclassificação é necessário para a mistura de bases de conhecimento de alta qualidade e econômicas.',
inconsistentEmbeddingModelTip:'O modelo de reclassificação é necessário se os modelos de incorporação das bases de conhecimento selecionadas forem inconsistentes.',
retrievalSettings:'Configurações de Recuperação',
rerankSettings:'Configurações de Reclassificação',
weightedScore:{
title:'Pontuação Ponderada',
description:'Ao ajustar os pesos atribuídos, esta estratégia de reclassificação determina se deve priorizar a correspondência semântica ou por palavras-chave.',
semanticFirst:'Semântica primeiro',
keywordFirst:'Palavra-chave primeiro',
customized:'Personalizado',
semantic:'Semântico',
keyword:'Palavra-chave',
},
nTo1RetrievalLegacy:'A recuperação N-para-1 será oficialmente descontinuada a partir de setembro. Recomenda-se usar a recuperação de múltiplos caminhos mais recente para obter melhores resultados.',
nTo1RetrievalLegacyLink:'Saiba mais',
nTo1RetrievalLegacyLinkText:'A recuperação N-para-1 será oficialmente descontinuada em setembro.',
docsFailedNotice:'documentele nu au putut fi indexate',
retry:'Reîncercați',
indexingTechnique:{
high_quality:'IC',
economy:'ECO',
},
indexingMethod:{
semantic_search:'VECTOR',
full_text_search:'TEXT COMPLET',
hybrid_search:'HIBRID',
invertedIndex:'INVERSAT',
},
mixtureHighQualityAndEconomicTip:'Modelul de reclasificare este necesar pentru amestecul de baze de cunoștințe de înaltă calitate și economice.',
inconsistentEmbeddingModelTip:'Modelul de reclasificare este necesar dacă modelele de încorporare ale bazelor de cunoștințe selectate sunt inconsistente.',
retrievalSettings:'Setări de recuperare',
rerankSettings:'Setări de reclasificare',
weightedScore:{
title:'Scor ponderat',
description:'Prin ajustarea ponderilor atribuite, această strategie de reclasificare determină dacă să prioritizeze potrivirea semantică sau pe cea a cuvintelor cheie.',
semanticFirst:'Semantic primul',
keywordFirst:'Cuvânt cheie primul',
customized:'Personalizat',
semantic:'Semantic',
keyword:'Cuvânt cheie',
},
nTo1RetrievalLegacy:'Recuperarea N-la-1 va fi oficial depreciată din septembrie. Se recomandă utilizarea celei mai recente recuperări cu căi multiple pentru a obține rezultate mai bune.',
nTo1RetrievalLegacyLink:'Află mai multe',
nTo1RetrievalLegacyLinkText:'Recuperarea N-la-1 va fi oficial depreciată în septembrie.',
nTo1RetrievalLegacy:'Geri alım stratejisinin optimizasyonu ve yükseltilmesi nedeniyle, N-to-1 geri alımı Eylül ayında resmi olarak kullanım dışı kalacaktır. O zamana kadar normal şekilde kullanabilirsiniz.',
nTo1RetrievalLegacyLink:'Daha fazla bilgi edin',
nTo1RetrievalLegacyLinkText:'N-1 geri alma Eylül ayında resmi olarak kullanımdan kaldırılacaktır.',
docsFailedNotice:'документи не вдалося проіндексувати',
retry:'Повторити спробу',
indexingTechnique:{
high_quality:'ВЯ',
economy:'ЕКО',
},
indexingMethod:{
semantic_search:'ВЕКТОР',
full_text_search:'ПОВНИЙ ТЕКСТ',
hybrid_search:'ГІБРИД',
invertedIndex:'ІНВЕРТОВАНИЙ',
},
mixtureHighQualityAndEconomicTip:'Модель перерангування потрібна для суміші високоякісних та економічних баз знань.',
inconsistentEmbeddingModelTip:'Модель перерангування потрібна, якщо моделі вбудовування вибраних баз знань є несумісними.',
retrievalSettings:'Налаштування пошуку',
rerankSettings:'Налаштування перерангування',
weightedScore:{
title:'Зважена оцінка',
description:'Регулюючи призначені ваги, ця стратегія перерангування визначає, чи надавати пріоритет семантичному чи ключовому відповідності.',
semanticFirst:'Спочатку семантичний',
keywordFirst:'Спочатку ключове слово',
customized:'Налаштований',
semantic:'Семантичний',
keyword:'Ключове слово',
},
nTo1RetrievalLegacy:'N-до-1 пошук буде офіційно застарілим з вересня. Рекомендується використовувати найновіший багатошляховий пошук для отримання кращих результатів.',
nTo1RetrievalLegacyLink:'Дізнатися більше',
nTo1RetrievalLegacyLinkText:'N-до-1 пошук буде офіційно застарілим у вересні.',
docsFailedNotice:'tài liệu không được lập chỉ mục',
retry:'Thử lại',
indexingTechnique:{
high_quality:'CHẤT LƯỢNG',
economy:'TIẾT KIỆM',
},
indexingMethod:{
semantic_search:'VECTOR',
full_text_search:'VĂN BẢN ĐẦY ĐỦ',
hybrid_search:'KẾT HỢP',
invertedIndex:'ĐẢO NGƯỢC',
},
mixtureHighQualityAndEconomicTip:'Mô hình xếp hạng lại là cần thiết cho sự kết hợp của các cơ sở kiến thức chất lượng cao và tiết kiệm.',
inconsistentEmbeddingModelTip:'Mô hình xếp hạng lại là cần thiết nếu các mô hình nhúng của các cơ sở kiến thức được chọn không nhất quán.',
retrievalSettings:'Cài đặt truy xuất',
rerankSettings:'Cài đặt xếp hạng lại',
weightedScore:{
title:'Điểm số có trọng số',
description:'Bằng cách điều chỉnh trọng số được gán, chiến lược xếp hạng lại này xác định liệu ưu tiên khớp ngữ nghĩa hay từ khóa.',
semanticFirst:'Ngữ nghĩa trước',
keywordFirst:'Từ khóa trước',
customized:'Tùy chỉnh',
semantic:'Ngữ nghĩa',
keyword:'Từ khóa',
},
nTo1RetrievalLegacy:'Truy xuất N-đến-1 sẽ chính thức bị loại bỏ từ tháng 9. Khuyến nghị sử dụng truy xuất đa đường dẫn mới nhất để có kết quả tốt hơn.',
nTo1RetrievalLegacyLink:'Tìm hiểu thêm',
nTo1RetrievalLegacyLinkText:'Truy xuất N-đến-1 sẽ chính thức bị loại bỏ vào tháng 9.',