feat: knowledge pipeline (#25360)

Signed-off-by: -LAN- <laipz8200@outlook.com>
Co-authored-by: twwu <twwu@dify.ai>
Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
Co-authored-by: jyong <718720800@qq.com>
Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com>
Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com>
Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com>
Co-authored-by: quicksand <quicksandzn@gmail.com>
Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com>
Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com>
Co-authored-by: zxhlyh <jasonapring2015@outlook.com>
Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: nite-knite <nkCoding@gmail.com>
Co-authored-by: Hanqing Zhao <sherry9277@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Harry <xh001x@hotmail.com>
This commit is contained in:
-LAN- 2025-09-18 12:49:10 +08:00 • committed by GitHub
commit 85cda47c70
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
1772 changed files with 102407 additions and 31710 deletions

View file

@ -340,6 +340,19 @@ const translation = {
'json': 'Código JSON',
'checkbox': 'Caixa de seleção',
'jsonSchema': 'Esquema JSON',
'unit': 'Unidade',
'uploadMethod': 'Método de upload',
'displayName': 'Nome de exibição',
'noDefaultSelected': 'Não selecione',
'placeholder': 'Espaço reservado',
'showAllSettings': 'Mostrar todas as configurações',
'startChecked': 'Iniciar verificado',
'tooltipsPlaceholder': 'Insira um texto útil mostrado ao passar o mouse sobre o rótulo',
'defaultValuePlaceholder': 'Insira o valor padrão para preencher previamente o campo',
'placeholderPlaceholder': 'Insira o texto a ser exibido quando o campo estiver vazio',
'unitPlaceholder': 'Exibir unidades após números, por exemplo, tokens',
'tooltips': 'Dicas de ferramentas',
'startSelectedOption': 'Iniciar opção selecionada',
},
vision: {
name: 'Visão',

View file

@ -80,6 +80,7 @@ const translation = {
noAppsFound: 'Nenhum aplicativo encontrado',
advancedShortDescription: 'Fluxo aprimorado para conversas de múltiplos turnos',
dropDSLToCreateApp: 'Cole o arquivo DSL aqui para criar o aplicativo',
import: 'Importação',
},
editApp: 'Editar Informações',
editAppTitle: 'Editar Informações do Aplicativo',

View file

@ -93,6 +93,7 @@ const translation = {
unlimitedApiRate: 'Sem limite de taxa da API',
apiRateLimitTooltip: 'O limite da taxa da API se aplica a todas as solicitações feitas através da API Dify, incluindo geração de texto, conversas de chat, execuções de fluxo de trabalho e processamento de documentos.',
documentsRequestQuotaTooltip: 'Especifica o número total de ações que um espaço de trabalho pode realizar por minuto dentro da base de conhecimento, incluindo criação, exclusão, atualizações de conjuntos de dados, uploads de documentos, modificações, arquivamento e consultas à base de conhecimento. Esse métrica é utilizada para avaliar o desempenho das solicitações à base de conhecimento. Por exemplo, se um usuário do Sandbox realizar 10 testes de impacto consecutivos dentro de um minuto, seu espaço de trabalho ficará temporariamente restrito de realizar as seguintes ações no minuto seguinte: criação, exclusão, atualizações de conjuntos de dados e uploads ou modificações de documentos.',
startBuilding: 'Comece a construir',
},
plans: {
sandbox: {
@ -115,6 +116,15 @@ const translation = {
description: 'Obtenha capacidades completas e suporte para sistemas críticos em larga escala.',
includesTitle: 'Tudo no plano Equipe, além de:',
features: {
7: 'Atualizações e manutenção por Dify oficialmente',
6: 'Segurança e controles avançados',
0: 'Soluções de implantação escaláveis de nível empresarial',
2: 'Recursos exclusivos da empresa',
5: 'SLAs negociados pela Dify Partners',
1: 'Autorização de Licença Comercial',
8: 'Suporte Técnico Profissional',
4: 'SSO',
3: 'Vários espaços de trabalho e gerenciamento corporativo',
},
btnText: 'Contate Vendas',
priceTip: 'Faturamento Anual Apenas',
@ -123,6 +133,9 @@ const translation = {
},
community: {
features: {
1: 'Espaço de trabalho individual',
0: 'Todos os principais recursos lançados no repositório público',
2: 'Está em conformidade com a licença de código aberto Dify',
},
name: 'Comunidade',
description: 'Para Usuários Individuais, Pequenas Equipes ou Projetos Não Comerciais',
@ -133,6 +146,10 @@ const translation = {
},
premium: {
features: {
0: 'Confiabilidade autogerenciada por vários provedores de nuvem',
1: 'Espaço de trabalho individual',
2: 'Personalização do logotipo e da marca do WebApp',
3: 'Suporte prioritário por e-mail e bate-papo',
},
includesTitle: 'Tudo da Comunidade, além de:',
for: 'Para organizações e equipes de médio porte',

View file

@ -490,6 +490,15 @@ const translation = {
addModelCredential: 'Adicionar credenciais do modelo',
configLoadBalancing: 'Configuração de Balanceamento de Carga',
specifyModelCredentialTip: 'Use uma credencial de modelo configurada.',
modelCredential: 'Credencial de modelo',
editModelCredential: 'Editar credencial do modelo',
manageCredentials: 'Gerenciar credenciais',
customModelCredentials: 'Credenciais de modelo personalizado',
addModel: 'Adicionar modelo',
removeModel: 'Remover modelo',
selectModelCredential: 'Selecione uma credencial de modelo',
customModelCredentialsDeleteTip: 'A credencial está em uso e não pode ser excluída',
addNewModelCredential: 'Adicionar nova credencial de modelo',
},
},
dataSource: {
@ -589,6 +598,7 @@ const translation = {
viewDoc: 'Ver documentação',
relatedApp: 'aplicativos relacionados',
noRelatedApp: 'Nenhum aplicativo vinculado',
pipeline: 'Pipeline',
},
voiceInput: {
speaking: 'Fale agora...',
@ -748,6 +758,9 @@ const translation = {
subtitle: 'Por favor, nos diga o que deu errado com esta resposta',
placeholder: 'Por favor, descreva o que deu errado ou como podemos melhorar...',
},
label: {
optional: '(opcional)',
},
}
export default translation

View file

@ -87,6 +87,7 @@ const translation = {
waterCrawlNotConfiguredDescription: 'Configure o Watercrawl com a chave da API para usá-lo.',
watercrawlDoc: 'Documentos do Watercrawl',
configureWatercrawl: 'Configurar Watercrawl',
running: 'Executando',
},
cancel: 'Cancelar',
},
@ -172,6 +173,7 @@ const translation = {
fullDocTip: 'O documento inteiro é usado como parte pai e recuperado diretamente. Observe que, por motivos de desempenho, o texto que exceder 10000 tokens será truncado automaticamente.',
paragraphTip: 'Esse modo divide o texto em parágrafos com base em delimitadores e no comprimento máximo da parte, usando o texto dividido como a parte pai para recuperação.',
previewChunkCount: '{{contagem}} Partes estimadas',
qaTip: 'Ao usar dados estruturados de perguntas e respostas, você pode criar documentos que combinam perguntas com respostas. Esses documentos são indexados com base na parte da pergunta, permitindo que o sistema recupere respostas relevantes com base na similaridade da consulta.',
},
stepThree: {
creationTitle: '🎉 Conhecimento criado',

View file

@ -99,6 +99,9 @@ const translation = {
upload_file: 'Enviar arquivo',
notion: 'Sincronizar do Notion',
github: 'Sincronizar do Github',
website_crawl: 'Rastreamento de sites',
local_file: 'Arquivo local',
online_document: 'Documento Online',
},
type: {
book: 'Livro',
@ -336,6 +339,7 @@ const translation = {
hierarchical: 'Pai-filho',
parentMaxTokens: 'Pai',
childMaxTokens: 'Criança',
waiting: 'Aguarde a incorporação...',
},
segment: {
paragraphs: 'Parágrafos',

View file

@ -0,0 +1,154 @@
const translation = {
creation: {
createFromScratch: {
title: 'Pipeline de conhecimento em branco',
description: 'Crie um pipeline personalizado do zero com controle total sobre o processamento e a estrutura de dados.',
},
backToKnowledge: 'Voltar ao Conhecimento',
successTip: 'Criou com sucesso uma Base de Dados de Conhecimento',
createKnowledge: 'Criar conhecimento',
errorTip: 'Falha ao criar uma base de dados de conhecimento',
importDSL: 'Importar de um arquivo DSL',
caution: 'Cuidado',
},
templates: {
customized: 'Personalizado',
},
operations: {
process: 'Processo',
details: 'Detalhes',
preview: 'Visualizar',
convert: 'Converter',
exportPipeline: 'Pipeline de exportação',
useTemplate: 'Usar este Pipeline de Conhecimento',
editInfo: 'Editar informações',
choose: 'Escolher',
saveAndProcess: 'Salvar & Processar',
dataSource: 'Fonte de dados',
backToDataSource: 'Voltar para a fonte de dados',
},
deletePipeline: {
title: 'Tem certeza de que deseja excluir este modelo de pipeline?',
content: 'A exclusão do modelo de pipeline é irreversível.',
},
publishPipeline: {
success: {
message: 'Pipeline de conhecimento publicado',
},
error: {
message: 'Falha ao publicar o pipeline de conhecimento',
},
},
publishTemplate: {
success: {
learnMore: 'Saiba Mais',
message: 'Modelo de pipeline publicado',
tip: 'Você pode usar este modelo na página de criação.',
},
error: {
message: 'Falha ao publicar o modelo de pipeline',
},
},
exportDSL: {
errorTip: 'Falha ao exportar DSL de pipeline',
successTip: 'Exportar DSL de pipeline com êxito',
},
details: {
structure: 'Estrutura',
structureTooltip: 'A Estrutura de Partes determina como os documentos são divididos e indexados, oferecendo os modos Geral, Pai-Filho e P e Resposta, e é exclusiva para cada base de conhecimento.',
},
testRun: {
steps: {
dataSource: 'Fonte de dados',
documentProcessing: 'Processamento de documentos',
},
dataSource: {
localFiles: 'Arquivos locais',
},
notion: {
title: 'Escolher páginas do Notion',
docTitle: 'Documentos do Notion',
},
title: 'Execução de teste',
tooltip: 'No modo de execução de teste, apenas um documento pode ser importado por vez para facilitar a depuração e a observação.',
},
inputFieldPanel: {
uniqueInputs: {
title: 'Entradas exclusivas para cada entrada',
tooltip: 'As entradas exclusivas só podem ser acessadas pela fonte de dados selecionada e seus nós downstream. Os usuários não precisarão preenchê-lo ao escolher outras fontes de dados. Somente os campos de entrada referenciados por variáveis de fonte de dados aparecerão na primeira etapa (Fonte de dados). Todos os outros campos serão mostrados na segunda etapa (Processar documentos).',
},
globalInputs: {
title: 'Entradas globais para todas as entradas',
tooltip: 'As entradas globais são compartilhadas entre todos os nós. Os usuários precisarão preenchê-los ao selecionar qualquer fonte de dados. Por exemplo, campos como delimitador e comprimento máximo do bloco podem ser aplicados uniformemente em várias fontes de dados. Somente os campos de entrada referenciados por variáveis de fonte de dados aparecem na primeira etapa (fonte de dados). Todos os outros campos aparecem na segunda etapa (Processar documentos).',
},
preview: {
stepTwoTitle: 'Documentos de processo',
stepOneTitle: 'Fonte de dados',
},
error: {
variableDuplicate: 'O nome da variável já existe. Por favor, escolha um nome diferente.',
},
addInputField: 'Adicionar campo de entrada',
editInputField: 'Editar campo de entrada',
title: 'Campos de entrada do usuário',
description: 'Os campos de entrada do usuário são usados para definir e coletar variáveis necessárias durante o processo de execução do pipeline. Os usuários podem personalizar o tipo de campo e configurar de forma flexível o valor de entrada para atender às necessidades de diferentes fontes de dados ou etapas de processamento de documentos.',
},
addDocuments: {
steps: {
processDocuments: 'Documentos de processo',
processingDocuments: 'Processamento de documentos',
chooseDatasource: 'Escolher uma fonte de dados',
},
stepOne: {
preview: 'Visualizar',
},
stepTwo: {
chunkSettings: 'Configurações de partes',
previewChunks: 'Visualizar partes',
},
stepThree: {
learnMore: 'Saiba Mais',
},
characters: 'Caracteres',
title: 'Adicionar documentos',
backToDataSource: 'Fonte de dados',
},
documentSettings: {
title: 'Configurações do documento',
},
onlineDocument: {},
onlineDrive: {
breadcrumbs: {
searchPlaceholder: 'Pesquisar arquivos...',
allFiles: 'Todos os arquivos',
allBuckets: 'Todos os buckets do Cloud Storage',
},
resetKeywords: 'Redefinir palavras-chave',
notSupportedFileType: 'Este tipo de arquivo não é suportado',
emptyFolder: 'Esta pasta está vazia',
emptySearchResult: 'Nenhum item foi encontrado',
},
credentialSelector: {},
conversion: {
confirm: {
title: 'Confirmação',
content: 'Esta ação é permanente. Você não poderá reverter para o método anterior. Por favor, confirme para converter.',
},
errorMessage: 'Falha ao converter o conjunto de dados em um pipeline',
warning: 'Esta ação não pode ser desfeita.',
descriptionChunk2: '— uma abordagem mais aberta e flexível com acesso a plugins do nosso mercado. Isso aplicará o novo método de processamento a todos os documentos futuros.',
successMessage: 'Converteu com êxito o conjunto de dados em um pipeline',
title: 'Converter em pipeline de conhecimento',
descriptionChunk1: 'Agora você pode converter sua base de conhecimento existente para usar o Pipeline de Conhecimento para processamento de documentos',
},
knowledgeNameAndIconPlaceholder: 'Insira o nome da Base de Conhecimento',
knowledgeDescription: 'Descrição do conhecimento',
knowledgePermissions: 'Permissões',
pipelineNameAndIcon: 'Nome e ícone do pipeline',
inputField: 'Campo de entrada',
knowledgeNameAndIcon: 'Nome e ícone do conhecimento',
editPipelineInfo: 'Editar informações do pipeline',
knowledgeDescriptionPlaceholder: 'Descreva o que está nesta Base de Conhecimento. Uma descrição detalhada permite que a IA acesse o conteúdo do conjunto de dados com mais precisão. Se estiver vazio, o Dify usará a estratégia de acerto padrão. (Opcional)',
}
export default translation

View file

@ -37,6 +37,14 @@ const translation = {
helpText: 'Aprenda a escrever uma boa descrição do conjunto de dados.',
upgradeHighQualityTip: 'Depois de atualizar para o modo de alta qualidade, reverter para o modo econômico não está disponível',
searchModel: 'Pesquisar modelo',
chunkStructure: {
description: 'sobre a estrutura do pedaço.',
learnMore: 'Saiba Mais',
title: 'Estrutura de Chunk',
},
numberOfKeywords: 'Número de palavras-chave',
onSearchResults: 'Nenhum membro corresponde à sua consulta de pesquisa.\nTente sua pesquisa novamente.',
nameAndIcon: 'Nome & Ícone',
},
}

View file

@ -41,6 +41,10 @@ const translation = {
},
change: 'Alterar',
changeRetrievalMethod: 'Alterar método de recuperação',
keyword_search: {
title: 'Índice invertido',
description: 'O Índice Invertido é uma estrutura usada para recuperação eficiente. Organizado por termos, cada termo aponta para documentos ou páginas da web que o contêm.',
},
},
docsFailedNotice: 'documentos falharam ao serem indexados',
retry: 'Tentar novamente',
@ -149,6 +153,8 @@ const translation = {
chunkingMode: {
parentChild: 'Pai-filho',
general: 'Geral',
graph: 'Gráfico',
qa: 'Perguntas e respostas',
},
parentMode: {
fullDoc: 'Documento completo',
@ -217,6 +223,9 @@ const translation = {
metadata: 'Metadados',
},
embeddingModelNotAvailable: 'O modelo de incorporação não está disponível.',
updated: 'Atualizado',
externalKnowledgeBase: 'Base de conhecimento externa',
createFromPipeline: 'Criar a partir do pipeline de conhecimento',
}
export default translation

View file

@ -1,4 +1,8 @@
const translation = {
sidebar: {
collapseSidebar: 'Recolher barra lateral',
expandSidebar: 'Expandir barra lateral',
},
}
export default translation

View file

@ -0,0 +1,38 @@
const translation = {
common: {
publishAsPipeline: {
description: 'Descrição do conhecimento',
descriptionPlaceholder: 'Insira a descrição deste Pipeline de Conhecimento. (Opcional)',
namePlaceholder: 'Insira o nome desse Pipeline de Conhecimento. (Obrigatório)',
name: 'Nome e ícone do pipeline',
},
processing: 'Processamento',
goToAddDocuments: 'Vá para adicionar documentos',
confirmPublish: 'Confirmar publicação',
testRun: 'Execução de teste',
preparingDataSource: 'Preparando a fonte de dados',
publishAs: 'Publicar como um funil de conhecimento',
reRun: 'Executar novamente',
confirmPublishContent: 'Depois de publicar com êxito o pipeline de conhecimento, a estrutura de partes dessa base de dados de conhecimento não pode ser modificada. Tem certeza de que deseja publicá-lo?',
},
inputField: {
manage: 'Gerir',
create: 'Criar campo de entrada do usuário',
},
publishToast: {
title: 'Este pipeline ainda não foi publicado',
desc: 'Quando o pipeline não é publicado, você pode modificar a estrutura de partes no nó da base de dados de conhecimento, e a orquestração e as alterações do pipeline serão salvas automaticamente como rascunho.',
},
result: {
resultPreview: {
loading: 'Processamento... Aguarde',
error: 'Ocorreu um erro durante a execução',
viewDetails: 'Ver detalhes',
},
},
ragToolSuggestions: {
title: 'Sugestões para RAG',
},
}
export default translation

View file

@ -17,6 +17,7 @@ const translation = {
entertainment: 'Entretenimento',
search: 'Procurar',
travel: 'Viajar',
rag: 'TRAPO',
},
allTags: 'Todas as tags',
searchTags: 'Tags de pesquisa',

View file

@ -6,6 +6,7 @@ const translation = {
models: 'Modelos',
agents: 'Estratégias do agente',
tools: 'Ferramentas',
datasources: 'Fontes de dados',
},
categorySingle: {
model: 'Modelo',
@ -13,6 +14,7 @@ const translation = {
agent: 'Estratégia do agente',
extension: 'Extensão',
tool: 'Ferramenta',
datasource: 'Fonte de dados',
},
list: {
source: {
@ -250,6 +252,8 @@ const translation = {
unavailable: 'Indisponível',
credentialUnavailable: 'Credenciais atualmente indisponíveis. Por favor, contate o administrador.',
credentialUnavailableInButton: 'Credencial indisponível',
emptyAuth: 'Configure a autenticação',
connectedWorkspace: 'Espaço de trabalho conectado',
},
deprecated: 'Obsoleto',
autoUpdate: {

View file

@ -244,6 +244,7 @@ const translation = {
publishTip: 'Aplicativo não publicado. Por favor, publique o aplicativo primeiro.',
},
},
allTools: 'Todas as ferramentas',
}
export default translation

View file

@ -86,7 +86,6 @@ const translation = {
limit: 'O paralelismo é limitado a {{num}} ramificações.',
depthLimit: 'Limite de camada de aninhamento paralelo de {{num}} camadas',
},
parallelRun: 'Execução paralela',
disconnect: 'Desligar',
jumpToNode: 'Ir para este nó',
addParallelNode: 'Adicionar nó paralelo',
@ -218,6 +217,8 @@ const translation = {
back: 'Voltar',
iteration: 'Iteração',
loop: 'Laço',
reRun: 'Executar novamente',
preparingDataSource: 'Preparando a fonte de dados',
},
tabs: {
'tools': 'Ferramentas',
@ -236,6 +237,8 @@ const translation = {
'searchBlock': 'Nó de busca',
'addAll': 'Adicionar tudo',
'allAdded': 'Todos adicionados',
'sources': 'Fontes',
'searchDataSource': 'Fonte de dados de pesquisa',
},
blocks: {
'start': 'Iniciar',
@ -260,6 +263,8 @@ const translation = {
'loop-end': 'Sair do Loop',
'loop-start': 'Início do Loop',
'loop': 'Laço',
'knowledge-index': 'Base de conhecimento',
'datasource': 'Fonte de dados',
},
blocksAbout: {
'start': 'Definir os parâmetros iniciais para iniciar um fluxo de trabalho',
@ -282,6 +287,8 @@ const translation = {
'agent': 'Invocar grandes modelos de linguagem para responder a perguntas ou processar linguagem natural',
'loop-end': 'Equivalente a "break". Este nó não possui itens de configuração. Quando o corpo do loop atinge este nó, o loop termina.',
'loop': 'Execute um loop de lógica até que a condição de término seja atendida ou o número máximo de loops seja alcançado.',
'knowledge-index': 'Base de Conhecimento Sobre',
'datasource': 'Fonte de dados Sobre',
},
operator: {
zoomIn: 'Aproximar',
@ -382,6 +389,7 @@ const translation = {
variable: 'Use variável',
input: 'Valor de entrada',
},
inputVars: 'Variáveis de entrada',
},
start: {
required: 'requerido',
@ -916,6 +924,27 @@ const translation = {
currentLoop: 'Laço Atual',
deleteDesc: 'A exclusão do nó de loop removerá todos os nós filhos',
},
dataSource: {
add: 'Adicionar fonte de dados',
supportedFileFormats: 'Formatos de arquivo suportados',
supportedFileFormatsPlaceholder: 'Extensão de arquivo, e.g. doc',
},
knowledgeBase: {
chunkStructureTip: {
title: 'Escolha uma estrutura de blocos',
learnMore: 'Saiba Mais',
message: 'A Base de Conhecimento Dify oferece suporte a três estruturas de agrupamento: Geral, Pai-filho e Perguntas e Respostas. Cada base de conhecimento pode ter apenas uma estrutura. A saída do nó anterior deve estar alinhada com a estrutura de partes selecionada. Observe que a escolha da estrutura de agrupamento afeta os métodos de índice disponíveis.',
},
retrievalSettingIsRequired: 'A configuração de recuperação é necessária',
changeChunkStructure: 'Alterar estrutura de blocos',
chunkStructure: 'Estrutura de Chunk',
chunkIsRequired: 'A estrutura de blocos é necessária',
aboutRetrieval: 'sobre o método de recuperação.',
chooseChunkStructure: 'Escolha uma estrutura de blocos',
indexMethodIsRequired: 'O método de índice é necessário',
chunksInput: 'Pedaços',
chunksInputTip: 'A variável de entrada do nó da base de conhecimento é Chunks. O tipo da variável é um objeto com um esquema JSON específico que deve ser consistente com a estrutura de chunk selecionada.',
},
},
tracing: {
stopBy: 'Parado por {{user}}',
@ -986,6 +1015,10 @@ const translation = {
resetConversationVar: 'Redefinir a variável da conversa para o valor padrão',
view: 'Ver log',
emptyTip: 'Após passar por um nó na tela ou executar um nó passo a passo, você pode visualizar o valor atual da variável do nó na Inspecção de Variáveis.',
export: 'exportação',
largeData: 'Dados grandes, visualização somente leitura. Exportar para ver tudo.',
exportToolTip: 'Exportar variável como arquivo',
largeDataNoExport: 'Dados grandes - apenas visualização parcial',
},
settingsTab: 'Configurações',
lastRunTab: 'Última execução',