feat(knowledge): 完成知识库部署相关脚本调整

This commit is contained in:
v-zhangjc9
2025-05-28 18:46:20 +08:00
parent e6e24dff27
commit 8c9cb6f21d
11 changed files with 67 additions and 152 deletions

View File

@@ -0,0 +1,24 @@
package com.lanyuanxiaoyao.service.ai.core.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* web 配置
*
* @author lanyuanxiaoyao
* @date 2023-04-21
*/
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 避免跨域影响调试
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowCredentials(true)
.allowedMethods("*")
.maxAge(3600);
}
}

View File

@@ -90,7 +90,6 @@ public class DataFileController {
@PostMapping("/start") @PostMapping("/start")
public AmisResponse<StartResponse> start(@RequestBody StartRequest request) { public AmisResponse<StartResponse> start(@RequestBody StartRequest request) {
log.info("Request: {}", request);
Long id = dataFileService.initialDataFile(request.filename); Long id = dataFileService.initialDataFile(request.filename);
return AmisResponse.responseSuccess(new StartResponse(id.toString())); return AmisResponse.responseSuccess(new StartResponse(id.toString()));
} }

View File

@@ -2,31 +2,7 @@ spring:
application: application:
name: service-ai-knowledge name: service-ai-knowledge
profiles: profiles:
include: common,metrics,forest include: random-port,common,discovery,metrics,forest
cloud:
zookeeper:
enabled: true
connect-string: b1m2.hdp.dc:2181,b1m3.hdp.dc:2181,b1m4.hdp.dc:2181,b1m5.hdp.dc:2181,b1m6.hdp.dc:2181
discovery:
enabled: ${spring.cloud.zookeeper.enabled}
root: /hudi-services
instance-id: ${spring.application.name}-127.0.0.1-${random.uuid}-20250514
metadata:
discovery: zookeeper
ip: 127.0.0.1
hostname: localhost
hostname_full: localhost
start_time: 20250514112750
datasource:
url: jdbc:mysql://localhost:3307/ai?useSSL=false
username: test
password: test
driver-class-name: com.mysql.cj.jdbc.Driver
security:
meta:
authority: ENC(GXKnbq1LS11U2HaONspvH+D/TkIx13aWTaokdkzaF7HSvq6Z0Rv1+JUWFnYopVXu)
username: ENC(moIO5mO39V1Z+RDwROK9JXY4GfM8ZjDgM6Si7wRZ1MPVjbhTpmLz3lz28rAiw7c2LeCmizfJzHkEXIwGlB280g==)
darkcode: ENC(0jzpQ7T6S+P7bZrENgYsUoLhlqGvw7DA2MN3BRqEOwq7plhtg72vuuiPQNnr3DaYz0CpyTvxInhpx11W3VZ1trD6NINh7O3LN70ZqO5pWXk=)
ai: ai:
openai: openai:
base-url: http://132.121.206.65:10086 base-url: http://132.121.206.65:10086
@@ -39,16 +15,10 @@ spring:
model: 'Bge-m3-vllm' model: 'Bge-m3-vllm'
vectorstore: vectorstore:
qdrant: qdrant:
api-key: lanyuanxiaoyao host: 132.121.206.65
jasypt: port: 29463
encryptor: api-key: ENC(0/0UkIKeAvyV17yNqSU3v04wmm8CdWKe4BYSSJa2FuBtK12TcZRJPdwk+ZpYnpISv+KmVTUrrmFBzAYrDR3ysA==)
password: 'r#(R,P"Dp^A47>WSn:Wn].gs/+"v:q_Q*An~zF*g-@j@jtSTv5H/,S-3:R?r9R}.'
server:
port: 8080
liteflow: liteflow:
rule-source: config/flow.xml rule-source: config/flow.xml
print-banner: false print-banner: false
check-node-exists: false check-node-exists: false
knowledge:
download-prefix: "http://localhost:8080"
upload-path: /Users/lanyuanxiaoyao/Project/IdeaProjects/hudi-service/service-ai/temp

View File

@@ -29,6 +29,6 @@
<root level="INFO"> <root level="INFO">
<appender-ref ref="Console"/> <appender-ref ref="Console"/>
<!-- <appender-ref ref="RollingFile"/>--> <appender-ref ref="RollingFile"/>
</root> </root>
</configuration> </configuration>

View File

@@ -168,3 +168,16 @@ deploy:
source-jar: service-ai-chat-1.0.0-SNAPSHOT.jar source-jar: service-ai-chat-1.0.0-SNAPSHOT.jar
jdk: "jdk17" jdk: "jdk17"
replicas: 1 replicas: 1
service-ai-knowledge:
order: 6
groups:
- "ai"
source-jar: service-ai-knowledge-1.0.0-SNAPSHOT.jar
jdk: "jdk17"
replicas: 1
arguments:
"[knowledge.upload-path]": ${deploy.runtime.data-path}/knowledge
"[spring.datasource.url]": ${deploy.runtime.database.config.url}
"[spring.datasource.username]": ${deploy.runtime.database.config.username}
"[spring.datasource.password]": ${deploy.runtime.database.config.password}
"[spring.datasource.driver-class-name]": ${deploy.runtime.database.config.driver-class-name}

View File

@@ -21,6 +21,6 @@ public class TestSecurityDecrypt {
config.setStringOutputType("base64"); config.setStringOutputType("base64");
encryptor.setConfig(config); encryptor.setConfig(config);
System.out.println(encryptor.decrypt("GXKnbq1LS11U2HaONspvH+D/TkIx13aWTaokdkzaF7HSvq6Z0Rv1+JUWFnYopVXu")); System.out.println(encryptor.encrypt("jdHyKdp9qxNqCK3c"));
} }
} }

View File

@@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
import {useNavigate, useParams} from 'react-router' import {useNavigate, useParams} from 'react-router'
import {amisRender, crudCommonOptions, mappingField, mappingItem} from '../../../util/amis.tsx' import {amisRender, commonInfo, crudCommonOptions, mappingField, mappingItem} from '../../../util/amis.tsx'
const statusMapping = [ const statusMapping = [
mappingItem('解析中', 'RUNNING', 'bg-warning'), mappingItem('解析中', 'RUNNING', 'bg-warning'),
@@ -24,16 +24,7 @@ const DataDetail: React.FC = () => {
{ {
type: 'service', type: 'service',
className: 'inline', className: 'inline',
api: { api: `${commonInfo.baseAiKnowledgeUrl}/knowledge/name?id=${knowledge_id}`,
method: 'get',
url: 'http://127.0.0.1:8080/knowledge/name',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
data: {
id: knowledge_id,
},
},
body: { body: {
type: 'tpl', type: 'tpl',
tpl: '${name}', tpl: '${name}',
@@ -47,16 +38,7 @@ const DataDetail: React.FC = () => {
body: [ body: [
{ {
type: 'crud', type: 'crud',
api: { api: `${commonInfo.baseAiKnowledgeUrl}/group/list?knowledge_id=${knowledge_id}`,
method: 'get',
url: 'http://127.0.0.1:8080/group/list',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
data: {
knowledge_id,
},
},
...crudCommonOptions(), ...crudCommonOptions(),
headerToolbar: [ headerToolbar: [
'reload', 'reload',
@@ -128,16 +110,7 @@ const DataDetail: React.FC = () => {
level: 'link', level: 'link',
size: 'sm', size: 'sm',
actionType: 'ajax', actionType: 'ajax',
api: { api: `${commonInfo.baseAiKnowledgeUrl}/group/delete?id=\${id}`,
method: 'get',
url: 'http://127.0.0.1:8080/group/delete',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
data: {
id: '${id}',
},
},
confirmText: '确认删除', confirmText: '确认删除',
confirmTitle: '删除', confirmTitle: '删除',
}, },

View File

@@ -1,7 +1,7 @@
import React from 'react' import React from 'react'
import {useParams} from 'react-router' import {useParams} from 'react-router'
import styled from 'styled-components' import styled from 'styled-components'
import {amisRender} from '../../../util/amis.tsx' import {amisRender, commonInfo} from '../../../util/amis.tsx'
const ImportDataDiv = styled.div` const ImportDataDiv = styled.div`
.antd-EditorControl { .antd-EditorControl {
@@ -23,16 +23,7 @@ const DataImport: React.FC = () => {
{ {
type: 'service', type: 'service',
className: 'inline', className: 'inline',
api: { api: `${commonInfo.baseAiKnowledgeUrl}/knowledge/name?id=${knowledge_id}`,
method: 'get',
url: 'http://127.0.0.1:8080/knowledge/name',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
data: {
id: knowledge_id,
},
},
body: { body: {
type: 'tpl', type: 'tpl',
tpl: '${name}', tpl: '${name}',
@@ -112,35 +103,17 @@ const DataImport: React.FC = () => {
autoUpload: false, autoUpload: false,
drag: true, drag: true,
multiple: true, multiple: true,
useChunk: true,
accept: '*', accept: '*',
// 5MB 5242880 // 5MB 5242880
// 100MB 104857600 // 100MB 104857600
// 500MB 524288000 // 500MB 524288000
// 1GB 1073741824 // 1GB 1073741824
maxSize: '', maxSize: 104857600,
maxLength: 0, receiver: `${commonInfo.baseAiKnowledgeUrl}/upload`
startChunkApi: { // useChunk: true,
method: 'post', // startChunkApi: `post:${commonInfo.baseAiKnowledgeUrl}/upload/start`,
url: 'http://127.0.0.1:8080/upload/start', // chunkApi: `post:${commonInfo.baseAiKnowledgeUrl}/upload/slice`,
headers: { // finishChunkApi: `post:${commonInfo.baseAiKnowledgeUrl}/upload/finish`,
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
},
chunkApi: {
method: 'post',
url: 'http://127.0.0.1:8080/upload/slice',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
},
finishChunkApi: {
method: 'post',
url: 'http://127.0.0.1:8080/upload/finish',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
},
}, },
{ {
className: 'text-right', className: 'text-right',
@@ -148,7 +121,7 @@ const DataImport: React.FC = () => {
buttons: [ buttons: [
{ {
type: 'reset', type: 'reset',
label: '重置' label: '重置',
}, },
{ {
type: 'submit', type: 'submit',
@@ -157,10 +130,7 @@ const DataImport: React.FC = () => {
level: 'secondary', level: 'secondary',
api: { api: {
method: 'post', method: 'post',
url: 'http://127.0.0.1:8080/knowledge/preview_text', url: `${commonInfo.baseAiKnowledgeUrl}/knowledge/preview_text`,
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
dataType: 'form', dataType: 'form',
data: { data: {
mode: '${mode|default:undefined}', mode: '${mode|default:undefined}',
@@ -178,10 +148,7 @@ const DataImport: React.FC = () => {
actionType: 'ajax', actionType: 'ajax',
api: { api: {
method: 'post', method: 'post',
url: 'http://127.0.0.1:8080/knowledge/submit_text', url: `${commonInfo.baseAiKnowledgeUrl}/knowledge/submit_text`,
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
dataType: 'form', dataType: 'form',
data: { data: {
id: knowledge_id, id: knowledge_id,

View File

@@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
import {useParams} from 'react-router' import {useParams} from 'react-router'
import {amisRender, crudCommonOptions} from '../../../util/amis.tsx' import {amisRender, commonInfo, crudCommonOptions} from '../../../util/amis.tsx'
const DataDetail: React.FC = () => { const DataDetail: React.FC = () => {
const {knowledge_id, group_id} = useParams() const {knowledge_id, group_id} = useParams()
@@ -18,16 +18,7 @@ const DataDetail: React.FC = () => {
{ {
type: 'service', type: 'service',
className: 'inline', className: 'inline',
api: { api: `${commonInfo.baseAiKnowledgeUrl}/knowledge/name?id=${knowledge_id}`,
method: 'get',
url: 'http://127.0.0.1:8080/knowledge/name',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
data: {
id: knowledge_id,
},
},
body: { body: {
type: 'tpl', type: 'tpl',
tpl: '${name}', tpl: '${name}',
@@ -41,17 +32,7 @@ const DataDetail: React.FC = () => {
body: [ body: [
{ {
type: 'crud', type: 'crud',
api: { api: `${commonInfo.baseAiKnowledgeUrl}/segment/list?knowledge_id=${knowledge_id}&group_id=${group_id}`,
method: 'get',
url: 'http://127.0.0.1:8080/segment/list',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
data: {
knowledge_id,
group_id,
},
},
...crudCommonOptions(), ...crudCommonOptions(),
headerToolbar: [ headerToolbar: [
'reload', 'reload',
@@ -110,12 +91,6 @@ const DataDetail: React.FC = () => {
level: 'link', level: 'link',
size: 'sm', size: 'sm',
actionType: 'ajax', actionType: 'ajax',
api: {
method: 'get',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
},
confirmText: '删除后无法恢复,确认删除该记录?', confirmText: '删除后无法恢复,确认删除该记录?',
confirmTitle: '删除', confirmTitle: '删除',
}, },

View File

@@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
import {useNavigate} from 'react-router' import {useNavigate} from 'react-router'
import {amisRender, crudCommonOptions, mappingField, mappingItem} from '../../../util/amis.tsx' import {amisRender, commonInfo, crudCommonOptions, mappingField, mappingItem} from '../../../util/amis.tsx'
const strategyMapping = [ const strategyMapping = [
mappingItem('文本', 'Cosine'), mappingItem('文本', 'Cosine'),
@@ -25,12 +25,7 @@ const Knowledge: React.FC = () => {
body: [ body: [
{ {
type: 'crud', type: 'crud',
api: { api: `${commonInfo.baseAiKnowledgeUrl}/knowledge/list`,
url: 'http://127.0.0.1:8080/knowledge/list',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
},
...crudCommonOptions(), ...crudCommonOptions(),
headerToolbar: [ headerToolbar: [
'reload', 'reload',
@@ -47,11 +42,8 @@ const Knowledge: React.FC = () => {
body: { body: {
type: 'form', type: 'form',
api: { api: {
url: 'http://127.0.0.1:8080/knowledge/add', url: `${commonInfo.baseAiKnowledgeUrl}/knowledge/add`,
dataType: 'form', dataType: 'form',
headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
},
}, },
body: [ body: [
{ {
@@ -156,7 +148,7 @@ const Knowledge: React.FC = () => {
actionType: 'ajax', actionType: 'ajax',
api: { api: {
method: 'get', method: 'get',
url: 'http://127.0.0.1:8080/knowledge/delete', url: `${commonInfo.baseAiKnowledgeUrl}/knowledge/delete`,
headers: { headers: {
'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==', 'Authorization': 'Basic QXhoRWJzY3dzSkRiWU1IMjpjWXhnM2I0UHRXb1ZENVNqRmF5V3h0blNWc2p6UnNnNA==',
}, },

View File

@@ -8,6 +8,8 @@ import axios from 'axios'
export const commonInfo = { export const commonInfo = {
baseUrl: 'http://132.126.207.130:35690/hudi_services/service_web', baseUrl: 'http://132.126.207.130:35690/hudi_services/service_web',
baseAiChatUrl: 'http://132.126.207.130:35690/hudi_services/ai_chat',
baseAiKnowledgeUrl: 'http://132.126.207.130:35690/hudi_services/ai_knowledge',
// baseUrl: '/hudi_services/service_web', // baseUrl: '/hudi_services/service_web',
clusters: { clusters: {
// hudi同步运行集群和yarn队列名称 // hudi同步运行集群和yarn队列名称