| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import request from '../utils/request'
- const RAG_TIMEOUT = 90000
- const unwrap = (promise) => promise.then(response => response.data)
- export function retrieveDocumentEvidence(query, topK = 5, mode = 'hybrid') {
- return unwrap(request.post('/rag/document/retrieve', { query, topK, filters: { mode } }, { timeout: RAG_TIMEOUT }))
- }
- export function retrieveStructuredEvidence(query, sourceIds = ['1'], topK = 5) {
- return unwrap(request.post('/rag/structured/retrieve', {
- query, sourceIds, topK, filters: { allowTextToSql: true }
- }, { timeout: RAG_TIMEOUT }))
- }
- export function retrieveGraphEvidence(query, sourceIds = ['1'], topK = 5) {
- return unwrap(request.post('/rag/graph/retrieve', {
- query, sourceIds, topK, filters: { allowTextToCypher: true }
- }, { timeout: RAG_TIMEOUT }))
- }
- export function retrieveKnowledgeBaseEvidence(params) {
- return unwrap(request.post('/rag/kb/retrieve', params, { timeout: RAG_TIMEOUT }))
- }
- export function getRagCapability(sourceType, sourceId) {
- return unwrap(request.get(`/rag/capabilities/${sourceType}/${sourceId}`))
- }
- export function refreshRagCapability(sourceType, sourceId) {
- return unwrap(request.post(`/rag/capabilities/${sourceType}/${sourceId}/refresh`))
- }
- export function suggestRagGovernance(sourceType, sourceId, description = '') {
- return unwrap(request.post(`/rag/capabilities/${sourceType}/${sourceId}/suggest`, { description }, { timeout: RAG_TIMEOUT }))
- }
- export function listRagQueryExamples(sourceType, sourceId) {
- return unwrap(request.get(`/rag/capabilities/${sourceType}/${sourceId}/examples`))
- }
- export function addRagQueryExampleCandidates(sourceType, sourceId, candidates) {
- return unwrap(request.post(`/rag/capabilities/${sourceType}/${sourceId}/examples/candidates`, candidates))
- }
- export function verifyRagQueryExample(id, verified) {
- return unwrap(request.put(`/rag/capabilities/examples/${id}/verified`, null, { params: { value: verified } }))
- }
- export function deleteRagQueryExample(id) {
- return unwrap(request.delete(`/rag/capabilities/examples/${id}`))
- }
- export function getKnowledgeBaseBindings(knowledgeBaseId) {
- return unwrap(request.get(`/rag/kb/${knowledgeBaseId}/bindings`))
- }
- export function listKnowledgeBases() {
- return unwrap(request.get('/rag/kb'))
- }
- export function updateKnowledgeBaseBindingConfig(knowledgeBaseId, bindingId, config) {
- return unwrap(request.put(`/rag/kb/${knowledgeBaseId}/bindings/${bindingId}/config`, config))
- }
- export function upsertKnowledgeBaseBindingBySource(knowledgeBaseId, sourceType, sourceId, config) {
- return unwrap(request.put(`/rag/kb/${knowledgeBaseId}/bindings/by-source`, { sourceType, sourceId, config }))
- }
- export function generateRagAnswer(question, evidences) {
- return unwrap(request.post('/rag/answer', { question, evidences }, { timeout: RAG_TIMEOUT }))
- }
- export async function sendRagQuestion(params) {
- const { query, topK = 5, strategy = 'hybrid', enabled, onStep } = params
- const results = { document: null, structured: null, graph: null, kb: null }
- const tasks = []
- const usesKnowledgeBase = enabled.structured || enabled.graph
- if (enabled.document) {
- onStep?.('document', 'running')
- tasks.push(retrieveDocumentEvidence(query, topK, strategy)
- .then(data => { results.document = data; onStep?.('document', 'success', data) })
- .catch(error => { onStep?.('document', 'failed', null, error); results.document = { evidences: [], diagnostics: { error: error.message } } }))
- }
- if (usesKnowledgeBase) {
- if (enabled.structured) onStep?.('structured', 'running')
- if (enabled.graph) onStep?.('graph', 'running')
- onStep?.('kb', 'running')
- tasks.push(retrieveKnowledgeBaseEvidence({
- knowledgeBaseId: 1,
- query,
- topK,
- filters: {
- sourceTypes: [enabled.structured && 'STRUCTURED_DATA', enabled.graph && 'GRAPH'].filter(Boolean),
- structured: { allowTextToSql: true },
- graph: { allowTextToCypher: true }
- }
- }).then(data => {
- results.kb = data
- const diagnosticsFor = prefix => Object.fromEntries(Object.entries(data.diagnostics || {}).filter(([key]) => key.startsWith(`${prefix}:`)))
- results.structured = { sourceType: 'STRUCTURED_DATA', evidences: data.evidences?.filter(e => e.sourceType === 'STRUCTURED_DATA') || [], diagnostics: diagnosticsFor('STRUCTURED_DATA') }
- results.graph = { sourceType: 'GRAPH', evidences: data.evidences?.filter(e => e.sourceType === 'GRAPH') || [], diagnostics: diagnosticsFor('GRAPH') }
- if (enabled.structured) {
- const failed = Object.keys(results.structured.diagnostics).length > 0
- onStep?.('structured', failed ? 'failed' : 'success', results.structured, failed ? new Error(JSON.stringify(results.structured.diagnostics)) : null)
- }
- if (enabled.graph) {
- const failed = Object.keys(results.graph.diagnostics).length > 0
- onStep?.('graph', failed ? 'failed' : 'success', results.graph, failed ? new Error(JSON.stringify(results.graph.diagnostics)) : null)
- }
- onStep?.('kb', 'success', data)
- }).catch(error => {
- if (enabled.structured) onStep?.('structured', 'failed', null, error)
- if (enabled.graph) onStep?.('graph', 'failed', null, error)
- onStep?.('kb', 'failed', null, error)
- results.kb = { evidences: [], diagnostics: { error: error.message } }
- }))
- }
- await Promise.all(tasks)
- const evidences = [results.document, results.structured, results.graph]
- .flatMap(result => result?.evidences || [])
- return { ...results, evidences }
- }
|