mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 15:31:05 +08:00
feat: Dify-compatible retrieval API endpoint (#15704)
## Summary Dify-compatible retrieval API for external knowledge base integration. ## Changes - **New handler**: DifyRetrievalHandler with POST/GET /api/v1/dify/retrieval - **Health check**: GET /api/v1/dify/retrieval/health - **Full pipeline**: KB validation -> permission check -> embedding -> metadata filter -> chunk retrieval -> child chunk aggregation -> optional KG search -> response assembly - **12 tests** covering all paths (success, errors, metadata filter, KG mode) - **Testability**: Handler dependencies defined as interfaces (KBServiceIface, ModelServiceIface, etc.) ## Files | File | Type | |------|------| | internal/handler/dify_retrieval_handler.go | New — handler + interfaces | | internal/handler/dify_retrieval_handler_test.go | New — 12 tests | | internal/router/router.go | Modified — route registration | | cmd/server_main.go | Modified — handler wiring | | internal/service/kg/pipeline.go | Modified — SetChatModel/SetEmbModel | | internal/service/kg/retrieval.go | New — helper functions | | internal/service/kg/scoring.go | Moved from service package | | internal/service/kg/search.go | New — KG search functions | | internal/service/kg/types.go | New — type definitions | --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -218,8 +218,20 @@ func startServer(config *server.Config) {
|
||||
&handler.SearchbotRealLLM{Svc: modelProviderService},
|
||||
)
|
||||
|
||||
// Dify retrieval handler
|
||||
docDAO := dao.NewDocumentDAO()
|
||||
retrievalService := nlp.NewRetrievalService(docEngine, docDAO)
|
||||
difyRetrievalHandler := handler.NewDifyRetrievalHandler(
|
||||
knowledgebaseService,
|
||||
modelProviderService,
|
||||
metadataService,
|
||||
retrievalService,
|
||||
docDAO,
|
||||
docEngine,
|
||||
)
|
||||
|
||||
// Initialize router
|
||||
r := router.NewRouter(authHandler, userHandler, tenantHandler, documentHandler, datasetsHandler, systemHandler, knowledgebaseHandler, chunkHandler, llmHandler, chatHandler, chatSessionHandler, connectorHandler, searchHandler, fileHandler, memoryHandler, mcpHandler, skillSearchHandler, providerHandler, agentHandler, relatedQuestionsHandler)
|
||||
r := router.NewRouter(authHandler, userHandler, tenantHandler, documentHandler, datasetsHandler, systemHandler, knowledgebaseHandler, chunkHandler, llmHandler, chatHandler, chatSessionHandler, connectorHandler, searchHandler, fileHandler, memoryHandler, mcpHandler, skillSearchHandler, providerHandler, agentHandler, relatedQuestionsHandler, difyRetrievalHandler)
|
||||
|
||||
// Create Gin engine
|
||||
ginEngine := gin.New()
|
||||
|
||||
Reference in New Issue
Block a user