| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ç¥è¯åºæ¨¡åä¼ åæ¹å¼ååæ°å½åè§èææ¡£ |
| | | |
| | | ## ä¸ãæ¦è¿° |
| | | |
| | | æ¬ææ¡£è¯¦ç»è¯´æç¥è¯åºæ¨¡åä¸æææ¥å£ãç»ä»¶ãæ¹æ³çä¼ åæ¹å¼ååæ°å½åè§è,æ¨å¨: |
| | | - ç»ä¸ååç«¯åæ°å½åè§è |
| | | - æç¡®åæ°ç±»ååå¿
å¡«æ§ |
| | | - è§èä¼ åæ¹å¼(GET paramsãPOST bodyãDELETE data) |
| | | - æä¾æ¸
æ°çåæ°æ å°å
³ç³» |
| | | |
| | | --- |
| | | |
| | | ## äºãåæ°å½åè§è |
| | | |
| | | ### 2.1 åºæ¬è§è |
| | | |
| | | #### å½å飿 ¼ |
| | | - **åç«¯åæ°**: éµå¾ª Java 驼峰å½åæ³ (camelCase) |
| | | - **åç«¯åæ°**: éµå¾ª JavaScript 驼峰å½åæ³ (camelCase) |
| | | - **æ°æ®åºå段**: éµå¾ª MySQL ä¸å线å½åæ³ (snake_case) |
| | | - **æ¥å£URL**: éµå¾ª RESTful 飿 ¼,使ç¨å°ååè¿å符 |
| | | |
| | | #### å½åçº¦å® |
| | | 1. **IDç¸å
³**: ç»ä¸ä½¿ç¨ `id`ã`Id` åç¼ |
| | | - `knowledgeBaseId` - ç¥è¯åºID |
| | | - `storageBlobId` - æä»¶blob ID |
| | | - `vectorId` - åéè®°å½ID |
| | | - `memoryId` - ä¼è¯ID |
| | | |
| | | 2. **å表ç¸å
³**: ç»ä¸ä½¿ç¨ `Ids` åç¼ææ°ç»ç±»å |
| | | - `storageBlobIds` - æä»¶blob IDå表 |
| | | - `ids` - éç¨IDå表 |
| | | |
| | | 3. **ç¶æç¸å
³**: ç»ä¸ä½¿ç¨ `Status` åç¼ |
| | | - `vectorStatus` - åéåç¶æ |
| | | |
| | | 4. **æ°éç¸å
³**: ç»ä¸ä½¿ç¨ `Count` åç¼ |
| | | - `fileCount` - æä»¶æ°é |
| | | - `chunkCount` - åçæ°é |
| | | - `totalChunkCount` - æ»åçæ°é |
| | | - `usageCount` - ä½¿ç¨æ¬¡æ° |
| | | |
| | | 5. **æ¶é´ç¸å
³**: ç»ä¸ä½¿ç¨ `Time` åç¼ |
| | | - `createTime` - å建æ¶é´ |
| | | - `updateTime` - æ´æ°æ¶é´ |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãæ¥å£ä¼ åæ¹å¼è§è |
| | | |
| | | ### 3.1 GET è¯·æ± - ä½¿ç¨ params |
| | | |
| | | **éç¨åºæ¯**: æ¥è¯¢ãå表ãå页çè·åæ°æ®çæ¥å£ |
| | | |
| | | **ä¼ åæ¹å¼**: éè¿ URL åæ°ä¼ é,ä½¿ç¨ `params` |
| | | |
| | | **示ä¾**: |
| | | ```javascript |
| | | // æ¥è¯¢ç¥è¯åºå表 |
| | | export function listKnowledgeBase(query) { |
| | | return request({ |
| | | url: "/knowledgeBase/getList", |
| | | method: "get", |
| | | params: query, // â
GET请æ±ä½¿ç¨ params |
| | | }); |
| | | } |
| | | |
| | | // å®é
è°ç¨ |
| | | listKnowledgeBase({ |
| | | current: 1, // å½å页ç |
| | | size: 20, // æ¯é¡µæ¡æ° |
| | | title: "", // ç¥è¯æ é¢(å¯é) |
| | | type: "" // ç¥è¯ç±»å(å¯é) |
| | | }); |
| | | ``` |
| | | |
| | | **URLæ ¼å¼**: `/knowledgeBase/getList?current=1&size=20&title=&type=` |
| | | |
| | | **è§èè¦ç¹**: |
| | | - â
æ¥è¯¢åæ°ç»ä¸æ¾å¨ `params` ä¸ |
| | | - â
å页忰å½å: `current` (å½å页)ã`size` (æ¯é¡µæ¡æ°) |
| | | - â
æç´¢åæ°å½å: ä¸å®ä½åæ®µä¿æä¸è´ |
| | | - â
è·¯å¾åæ°ä½¿ç¨ URL å ä½ç¬¦: `/path/{id}` |
| | | |
| | | --- |
| | | |
| | | ### 3.2 POST è¯·æ± - ä½¿ç¨ data |
| | | |
| | | **éç¨åºæ¯**: æ°å¢ãæ´æ°ãä¿åçæäº¤æ°æ®çæ¥å£ |
| | | |
| | | **ä¼ åæ¹å¼**: éè¿è¯·æ±ä½ä¼ é,ä½¿ç¨ `data` |
| | | |
| | | **示ä¾**: |
| | | ```javascript |
| | | // æ°å¢ç¥è¯åº |
| | | export function addKnowledgeBase(data) { |
| | | return request({ |
| | | url: "/knowledgeBase/add", |
| | | method: "post", |
| | | data: data, // â
POST请æ±ä½¿ç¨ data |
| | | }); |
| | | } |
| | | |
| | | // å®é
è°ç¨ |
| | | addKnowledgeBase({ |
| | | title: "æä½æå", |
| | | type: "guide", |
| | | scenario: "ç³»ç»æä½æå¯¼", |
| | | efficiency: "high", |
| | | problem: "ç¨æ·ä¸ä¼æä½ç³»ç»", |
| | | solution: "æç
§æä½æåæ§è¡...", |
| | | keyPoints: "æ¥éª¤1,æ¥éª¤2,æ¥éª¤3", |
| | | creator: "å¼ ä¸", |
| | | usageCount: 0 |
| | | }); |
| | | ``` |
| | | |
| | | **请æ±ä½æ ¼å¼**: JSON æ ¼å¼,`Content-Type: application/json` |
| | | |
| | | **è§èè¦ç¹**: |
| | | - â
æäº¤æ°æ®ç»ä¸æ¾å¨ `data` ä¸ |
| | | - â
åæ°åä¸å端å®ä½åæ®µä¿æä¸è´ |
| | | - â
å¿
å¡«åæ°éè¦å¨è¡¨åéªè¯è§åä¸å£°æ |
| | | - â
æ°å¼ç±»ååæ°éæå®é»è®¤å¼ |
| | | |
| | | --- |
| | | |
| | | ### 3.3 DELETE è¯·æ± - ä½¿ç¨ data |
| | | |
| | | **éç¨åºæ¯**: å é¤ãæ¹éå é¤çæä½ |
| | | |
| | | **ä¼ åæ¹å¼**: éè¿è¯·æ±ä½ä¼ éæ°ç»æå¯¹è±¡,ä½¿ç¨ `data` |
| | | |
| | | **示ä¾**: |
| | | ```javascript |
| | | // å é¤ç¥è¯åº |
| | | export function delKnowledgeBase(query) { |
| | | return request({ |
| | | url: "/knowledgeBase/delete", |
| | | method: "delete", |
| | | data: query, // â
DELETE请æ±ä½¿ç¨ data ä¼ éæ°ç» |
| | | }); |
| | | } |
| | | |
| | | // å®é
è°ç¨(æ¹éå é¤) |
| | | delKnowledgeBase([1, 2, 3]); // â
ç´æ¥ä¼ éIDæ°ç» |
| | | ``` |
| | | |
| | | **请æ±ä½æ ¼å¼**: JSON æ°ç» `[1, 2, 3]` |
| | | |
| | | **è§èè¦ç¹**: |
| | | - â
DELETE请æ±çåæ°æ¾å¨ `data` ä¸ |
| | | - â
æ¹éå é¤ä¼ éIDæ°ç» |
| | | - â
å个å é¤ä¹å¯ä»¥ä¼ éæ°ç» `[id]` |
| | | - â ï¸ ä¸è¦ä½¿ç¨ `params` ä¼ éå é¤åæ° |
| | | |
| | | --- |
| | | |
| | | ### 3.4 æµå¼è¯·æ± - ä½¿ç¨ Fetch API |
| | | |
| | | **éç¨åºæ¯**: AIé®çãæµå¼è¾åºçéè¦å®æ¶ååºçæ¥å£ |
| | | |
| | | **ä¼ åæ¹å¼**: 使ç¨åç Fetch API,䏿¯æ axios |
| | | |
| | | **示ä¾**: |
| | | ```javascript |
| | | // ç¥è¯åºé®ç(æµå¼) |
| | | export function knowledgeChat(data) { |
| | | const token = getToken(); |
| | | return fetch(import.meta.env.VITE_APP_BASE_API + '/ai/knowledge/chat', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': 'Bearer ' + token |
| | | }, |
| | | body: JSON.stringify(data) // â
ä½¿ç¨ body ä¼ éåæ° |
| | | }); |
| | | } |
| | | |
| | | // å®é
è°ç¨ |
| | | knowledgeChat({ |
| | | knowledgeBaseId: 10, |
| | | memoryId: "session-xxx", |
| | | question: "å¦ä½æä½å®¡æ¹æµç¨?" |
| | | }); |
| | | ``` |
| | | |
| | | **è§èè¦ç¹**: |
| | | - â
æµå¼æ¥å£å¿
é¡»ä½¿ç¨ Fetch API |
| | | - â
åæ°ä½¿ç¨ `JSON.stringify()` åºåå |
| | | - â
å¿
é¡»æºå¸¦ Authorization header |
| | | - â ï¸ axios 䏿¯ææµå¼ååº,ä¸è¦ä½¿ç¨ |
| | | |
| | | --- |
| | | |
| | | ## åã宿´åæ°å¯¹ç
§è¡¨ |
| | | |
| | | ### 4.1 ç¥è¯åºç®¡çæ¥å£åæ° |
| | | |
| | | #### æ¥è¯¢å表 (`GET /knowledgeBase/getList`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | current | Integer | æ¯ | params | å½å页ç | 1 | |
| | | | size | Integer | æ¯ | params | æ¯é¡µæ¡æ° | 20 | |
| | | | title | String | å¦ | params | ç¥è¯æ é¢(æ¨¡ç³æç´¢) | "æä½" | |
| | | | type | String | å¦ | params | ç¥è¯ç±»å(精确å¹é
) | "guide" | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | listKnowledgeBase({ |
| | | current: 1, |
| | | size: 20, |
| | | title: "", |
| | | type: "" |
| | | }); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### æ°å¢ç¥è¯åº (`POST /knowledgeBase/add`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | title | String | æ¯ | data | ç¥è¯æ é¢ | "æä½æå" | |
| | | | type | String | æ¯ | data | ç¥è¯ç±»å | "guide" | |
| | | | scenario | String | å¦ | data | éç¨åºæ¯ | "ç³»ç»æä½" | |
| | | | efficiency | String | å¦ | data | è§£å³æç | "high" | |
| | | | problem | String | æ¯ | data | é®é¢æè¿° | "ç¨æ·ä¸ä¼æä½" | |
| | | | solution | String | æ¯ | data | è§£å³æ¹æ¡ | "åèæå" | |
| | | | keyPoints | String | å¦ | data | å
³é®è¦ç¹ | "æ¥éª¤1,æ¥éª¤2" | |
| | | | creator | String | å¦ | data | å建人 | "å¼ ä¸" | |
| | | | usageCount | Integer | å¦ | data | ä½¿ç¨æ¬¡æ° | 0 | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | addKnowledgeBase({ |
| | | title: "æä½æå", |
| | | type: "guide", |
| | | scenario: "ç³»ç»æä½æå¯¼", |
| | | efficiency: "high", |
| | | problem: "ç¨æ·ä¸ä¼æä½ç³»ç»", |
| | | solution: "æç
§æä½æåæ§è¡...", |
| | | keyPoints: "æ¥éª¤1,æ¥éª¤2,æ¥éª¤3", |
| | | creator: "å¼ ä¸", |
| | | usageCount: 0 |
| | | }); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### æ´æ°ç¥è¯åº (`POST /knowledgeBase/update`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | id | Long | æ¯ | data | ç¥è¯åºID | 10 | |
| | | | *(å
¶ä»åæ°åæ°å¢)* | - | - | data | - | - | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | updateKnowledgeBase({ |
| | | id: 10, |
| | | title: "æä½æå(æ´æ°)", |
| | | type: "guide", |
| | | // ...å
¶ä»åæ° |
| | | }); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### å é¤ç¥è¯åº (`DELETE /knowledgeBase/delete`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | ids | Long[] | æ¯ | data | ç¥è¯åºIDæ°ç» | [1, 2, 3] | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | delKnowledgeBase([1, 2, 3]); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 4.2 æä»¶ç®¡çæ¥å£åæ° |
| | | |
| | | #### æ¥è¯¢åéåç¶æ (`GET /knowledgeBase/vector/status/{knowledgeBaseId}`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | knowledgeBaseId | Long | æ¯ | URLè·¯å¾ | ç¥è¯åºID | 10 | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | getVectorStatus(10); |
| | | ``` |
| | | |
| | | **URL**: `/knowledgeBase/vector/status/10` |
| | | |
| | | --- |
| | | |
| | | #### ä¿åæä»¶å
³è (`POST /knowledgeBase/file/save`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | knowledgeBaseId | Long | æ¯ | data | ç¥è¯åºID | 10 | |
| | | | storageBlobIds | Long[] | æ¯ | data | æä»¶blob IDæ°ç» | [123, 124] | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | saveKnowledgeBaseFiles({ |
| | | knowledgeBaseId: 10, |
| | | storageBlobIds: [123, 124] |
| | | }); |
| | | ``` |
| | | |
| | | **éè¦è¯´æ**: |
| | | - â ï¸ **å¿
é¡»å
è°ç¨ `/common/upload` ä¸ä¼ æä»¶** |
| | | - â ï¸ **è·åè¿åç `data.id` ä½ä¸º `storageBlobId`** |
| | | - â ï¸ **æ¤æ¥å£è§¦å弿¥åéåå¤ç** |
| | | |
| | | --- |
| | | |
| | | #### å é¤ç¥è¯åºæä»¶ (`DELETE /knowledgeBase/file/delete`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | ids | Long[] | æ¯ | data | åéè®°å½IDæ°ç» | [1, 2, 3] | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | deleteKnowledgeBaseFile([row.id]); |
| | | // 注æ: row.id æ¯åéè®°å½çID,䏿¯ storageBlobId |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### éæ°åéå (`POST /knowledgeBase/vector/reprocess/{vectorId}`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | vectorId | Long | æ¯ | URLè·¯å¾ | åéè®°å½ID | 1 | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | reprocessVector(1); |
| | | ``` |
| | | |
| | | **URL**: `/knowledgeBase/vector/reprocess/1` |
| | | |
| | | --- |
| | | |
| | | ### 4.3 ç¥è¯é®çæ¥å£åæ° |
| | | |
| | | #### ç¥è¯åºé®ç (`POST /ai/knowledge/chat` - æµå¼) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | knowledgeBaseId | Long | æ¯ | body | ç¥è¯åºID | 10 | |
| | | | memoryId | String | æ¯ | body | ä¼è¯ID | "kb-chat-xxx" | |
| | | | question | String | æ¯ | body | ç¨æ·é®é¢ | "å¦ä½æä½?" | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | knowledgeChat({ |
| | | knowledgeBaseId: chatKnowledgeBaseId.value, |
| | | memoryId: memoryId.value, |
| | | question: currentQuestion |
| | | }); |
| | | ``` |
| | | |
| | | **ä¼è¯IDçæè§è**: |
| | | ```javascript |
| | | // æ¹å¼1: ä½¿ç¨ crypto.randomUUID() (æ¨è) |
| | | memoryId.value = crypto.randomUUID(); |
| | | |
| | | // æ¹å¼2: ä½¿ç¨æ¶é´æ³ |
| | | memoryId.value = 'kb-chat-' + Date.now(); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | #### æ¥è¯¢é®çåå² (`GET /ai/knowledge/history/{memoryId}`) |
| | | |
| | | | åæ°å | ç±»å | å¿
å¡« | ä¼ åä½ç½® | 说æ | 示ä¾å¼ | |
| | | |--------|------|------|----------|------|--------| |
| | | | memoryId | String | æ¯ | URLè·¯å¾ | ä¼è¯ID | "kb-chat-xxx" | |
| | | |
| | | **å端è°ç¨**: |
| | | ```javascript |
| | | getKnowledgeHistory('kb-chat-xxx'); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## äºãååºæ°æ®å段对ç
§è¡¨ |
| | | |
| | | ### 5.1 ç¥è¯åºå表ååº |
| | | |
| | | ```javascript |
| | | { |
| | | code: 200, |
| | | data: { |
| | | total: 100, |
| | | records: [ |
| | | { |
| | | id: 1, // ç¥è¯åºID |
| | | title: "æä½æå", // ç¥è¯æ é¢ |
| | | type: "guide", // ç¥è¯ç±»å |
| | | scenario: "ç³»ç»æä½", // éç¨åºæ¯ |
| | | efficiency: "high", // è§£å³æç |
| | | problem: "...", // é®é¢æè¿° |
| | | solution: "...", // è§£å³æ¹æ¡ |
| | | keyPoints: "...", // å
³é®è¦ç¹ |
| | | creator: "å¼ ä¸", // å建人 |
| | | usageCount: 10, // ä½¿ç¨æ¬¡æ° |
| | | fileCount: 3, // æä»¶æ°é |
| | | totalChunkCount: 45, // æ»åçæ°é |
| | | createTime: "2026-06-08", // å建æ¶é´ |
| | | updateTime: "2026-06-08" // æ´æ°æ¶é´ |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 5.2 æä»¶åéåç¶æååº |
| | | |
| | | ```javascript |
| | | { |
| | | code: 200, |
| | | data: [ |
| | | { |
| | | id: 1, // åéè®°å½ID |
| | | storageBlobId: 123, // æä»¶blob ID |
| | | fileName: "æä½æå.docx", // æä»¶å |
| | | fileType: "docx", // æä»¶ç±»å |
| | | vectorStatus: 2, // åéåç¶æ: 0-å¾
å¤ç, 1-å¤çä¸, 2-已宿, 3-失败 |
| | | chunkCount: 15, // åçæ°é |
| | | namespace: "kb-10", // åéå½åç©ºé´ |
| | | vectorError: null, // åéåéè¯¯ä¿¡æ¯ |
| | | createTime: "2026-06-08" // å建æ¶é´ |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 5.3 æä»¶ä¸ä¼ ååº |
| | | |
| | | ```javascript |
| | | { |
| | | code: 200, |
| | | data: { |
| | | id: 123, // â ï¸ è¿æ¯ storageBlobId,ç¨äºä¿åæä»¶å
³è |
| | | name: "æä½æå.docx", // æä»¶å |
| | | url: "/profile/upload/...", // æä»¶URL |
| | | previewURL: "...", // é¢è§URL |
| | | downloadURL: "..." // ä¸è½½URL |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **éè¦**: ä¸ä¼ æåå,éè¦æå `response.data.id` ä½ä¸º `storageBlobId` |
| | | |
| | | --- |
| | | |
| | | ## å
ãå端ç»ä»¶ä¼ åè§è |
| | | |
| | | ### 6.1 è¡¨æ ¼ç»ä»¶ä¼ å |
| | | |
| | | ```vue |
| | | <PIMTable |
| | | rowKey="id" <!-- è¡å¯ä¸æ è¯å段 --> |
| | | :column="tableColumn" <!-- åé
ç½® --> |
| | | :tableData="tableData" <!-- è¡¨æ ¼æ°æ® --> |
| | | :page="page" <!-- å页é
ç½® --> |
| | | :isSelection="true" <!-- æ¯å¦æ¯æéæ© --> |
| | | @selection-change="handleSelectionChange" |
| | | :tableLoading="tableLoading" |
| | | @pagination="pagination" |
| | | :total="page.total" |
| | | /> |
| | | ``` |
| | | |
| | | **å页é
ç½®**: |
| | | ```javascript |
| | | page: { |
| | | current: 1, // å½å页ç |
| | | size: 20, // æ¯é¡µæ¡æ° |
| | | total: 0 // æ»è®°å½æ° |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 6.2 å¼¹çªç»ä»¶ä¼ å |
| | | |
| | | ```vue |
| | | <FormDialog |
| | | v-model="dialogVisible" <!-- æ§å¶æ¾ç¤º --> |
| | | :title="dialogTitle" <!-- å¼¹çªæ é¢ --> |
| | | :width="'800px'" <!-- å¼¹çªå®½åº¦ --> |
| | | @close="closeDialog" <!-- å
³éåè° --> |
| | | @confirm="submitForm" <!-- 确认åè° --> |
| | | @cancel="closeDialog" <!-- åæ¶åè° --> |
| | | > |
| | | <!-- å¼¹çªå
容 --> |
| | | </FormDialog> |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 6.3 ä¸ä¼ ç»ä»¶ä¼ å |
| | | |
| | | ```vue |
| | | <el-upload |
| | | :action="uploadUrl" <!-- ä¸ä¼ å°å --> |
| | | :headers="uploadHeaders" <!-- 请æ±å¤´ --> |
| | | :on-success="handleUploadSuccess" <!-- æååè° --> |
| | | :on-error="handleUploadError" <!-- 失败åè° --> |
| | | :before-upload="beforeUpload" <!-- ä¸ä¼ åæ ¡éª --> |
| | | multiple <!-- æ¯æå¤é --> |
| | | :show-file-list="false" <!-- 䏿¾ç¤ºæä»¶å表 --> |
| | | accept=".txt,.md,.docx,.xlsx,.xls,.pdf" <!-- æä»¶ç±»åéå¶ --> |
| | | /> |
| | | ``` |
| | | |
| | | **ä¸ä¼ é
ç½®**: |
| | | ```javascript |
| | | const uploadUrl = import.meta.env.VITE_APP_BASE_API + "/common/upload"; |
| | | const uploadHeaders = { |
| | | Authorization: "Bearer " + getToken() |
| | | }; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãåæ°ç±»å转æ¢è§è |
| | | |
| | | ### 7.1 å符串转æ°å¼ |
| | | |
| | | ```javascript |
| | | // å端è¿åçæ°å¼å¯è½æ¯å符串,éè¦è½¬æ¢ |
| | | const id = Number(row.id); |
| | | const count = parseInt(row.chunkCount, 10); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 7.2 æ°å¼è½¬å符串 |
| | | |
| | | ```javascript |
| | | // URLè·¯å¾åæ°éè¦å符串 |
| | | const url = `/knowledgeBase/vector/status/${String(knowledgeBaseId)}`; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 7.3 æ°ç»å¤ç |
| | | |
| | | ```javascript |
| | | // IDæ°ç»å¤ç |
| | | const ids = selection.map(item => item.id); // â
æåID |
| | | await delKnowledgeBase(ids); // â
ä¼ éæ°ç» |
| | | |
| | | // æä»¶blob IDæ°ç» |
| | | const blobIds = uploadedFiles.map(file => file.id); |
| | | await saveKnowledgeBaseFiles({ |
| | | knowledgeBaseId: currentKnowledgeBase.id, |
| | | storageBlobIds: blobIds |
| | | }); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## å
«ãåæ°éªè¯è§è |
| | | |
| | | ### 8.1 表åéªè¯è§å |
| | | |
| | | ```javascript |
| | | const rules = { |
| | | title: [ |
| | | { required: true, message: "请è¾å
¥ç¥è¯æ é¢", trigger: "blur" } |
| | | ], |
| | | type: [ |
| | | { required: true, message: "è¯·éæ©ç¥è¯ç±»å", trigger: "change" } |
| | | ], |
| | | problem: [ |
| | | { required: true, message: "请æè¿°éå°çé®é¢", trigger: "blur" } |
| | | ], |
| | | solution: [ |
| | | { required: true, message: "è¯·è¯¦ç»æè¿°è§£å³æ¹æ¡", trigger: "blur" } |
| | | ] |
| | | }; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 8.2 ä¸ä¼ æä»¶æ ¡éª |
| | | |
| | | ```javascript |
| | | const beforeUpload = (file) => { |
| | | // æä»¶ç±»åæ ¡éª |
| | | const allowedTypes = ['.txt', '.md', '.docx', '.xlsx', '.xls', '.pdf']; |
| | | const fileName = file.name.toLowerCase(); |
| | | const isAllowed = allowedTypes.some(type => fileName.endsWith(type)); |
| | | |
| | | if (!isAllowed) { |
| | | ElMessage.error('åªæ¯æ txtãmdãdocxãxlsxãxlsãpdf æ ¼å¼çæä»¶'); |
| | | return false; |
| | | } |
| | | |
| | | // æä»¶å¤§å°æ ¡éª |
| | | const isLt50M = file.size / 1024 / 1024 < 50; |
| | | if (!isLt50M) { |
| | | ElMessage.error('æä»¶å¤§å°ä¸è½è¶
è¿ 50MB'); |
| | | return false; |
| | | } |
| | | |
| | | return true; |
| | | }; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 8.3 é®çåæ°æ ¡éª |
| | | |
| | | ```javascript |
| | | const sendQuestion = async () => { |
| | | // 空å
å®¹æ ¡éª |
| | | if (!questionInput.value.trim()) { |
| | | ElMessage.warning("请è¾å
¥é®é¢"); |
| | | return; |
| | | } |
| | | |
| | | // ç¥è¯åºéæ©æ ¡éª |
| | | if (!chatKnowledgeBaseId.value) { |
| | | ElMessage.warning("请å
éæ©ç¥è¯åº"); |
| | | return; |
| | | } |
| | | |
| | | // åéç¶ææ ¡éª |
| | | if (sending.value) { |
| | | return; // 鲿¢éå¤åé |
| | | } |
| | | |
| | | // ...åéè¯·æ± |
| | | }; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ä¹ã常è§é误åè§£å³æ¹æ¡ |
| | | |
| | | ### 9.1 åæ°åä¸å¹é
|
| | | |
| | | **é误示ä¾**: |
| | | ```javascript |
| | | // â é误: 使ç¨äºä¸å线å½å |
| | | saveKnowledgeBaseFiles({ |
| | | knowledge_base_id: 10, |
| | | storage_blob_ids: [123] |
| | | }); |
| | | |
| | | // â
æ£ç¡®: 使ç¨é©¼å³°å½å |
| | | saveKnowledgeBaseFiles({ |
| | | knowledgeBaseId: 10, |
| | | storageBlobIds: [123] |
| | | }); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 9.2 ä¼ åä½ç½®é误 |
| | | |
| | | **é误示ä¾**: |
| | | ```javascript |
| | | // â é误: POST请æ±ä½¿ç¨ params |
| | | export function addKnowledgeBase(data) { |
| | | return request({ |
| | | url: "/knowledgeBase/add", |
| | | method: "post", |
| | | params: data // â é误 |
| | | }); |
| | | } |
| | | |
| | | // â
æ£ç¡®: POST请æ±ä½¿ç¨ data |
| | | export function addKnowledgeBase(data) { |
| | | return request({ |
| | | url: "/knowledgeBase/add", |
| | | method: "post", |
| | | data: data // â
æ£ç¡® |
| | | }); |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 9.3 DELETE请æ±åæ°é误 |
| | | |
| | | **é误示ä¾**: |
| | | ```javascript |
| | | // â é误: DELETEä½¿ç¨ params ä¼ éæ°ç» |
| | | export function delKnowledgeBase(ids) { |
| | | return request({ |
| | | url: "/knowledgeBase/delete", |
| | | method: "delete", |
| | | params: ids // â é误 |
| | | }); |
| | | } |
| | | |
| | | // â
æ£ç¡®: DELETEä½¿ç¨ data ä¼ éæ°ç» |
| | | export function delKnowledgeBase(ids) { |
| | | return request({ |
| | | url: "/knowledgeBase/delete", |
| | | method: "delete", |
| | | data: ids // â
æ£ç¡® |
| | | }); |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 9.4 æµå¼æ¥å£é误 |
| | | |
| | | **é误示ä¾**: |
| | | ```javascript |
| | | // â é误: æµå¼æ¥å£ä½¿ç¨ axios |
| | | export function knowledgeChat(data) { |
| | | return request({ |
| | | url: "/ai/knowledge/chat", |
| | | method: "post", |
| | | data: data // â axios䏿¯ææµå¼ |
| | | }); |
| | | } |
| | | |
| | | // â
æ£ç¡®: æµå¼æ¥å£ä½¿ç¨ Fetch API |
| | | export function knowledgeChat(data) { |
| | | const token = getToken(); |
| | | return fetch(import.meta.env.VITE_APP_BASE_API + '/ai/knowledge/chat', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | 'Authorization': 'Bearer ' + token |
| | | }, |
| | | body: JSON.stringify(data) // â
æ£ç¡® |
| | | }); |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 9.5 æä»¶ä¸ä¼ IDè·åé误 |
| | | |
| | | **é误示ä¾**: |
| | | ```javascript |
| | | // â é误: ä¸ä¼ æååæ²¡æä¿å storageBlobId |
| | | const handleUploadSuccess = (response) => { |
| | | if (response.code === 200) { |
| | | ElMessage.success("ä¸ä¼ æå"); |
| | | // â æ²¡æä¿å response.data.id |
| | | } |
| | | }; |
| | | |
| | | // â
æ£ç¡®: ä¿å storageBlobId ç¨äºåç»å
³è |
| | | const handleUploadSuccess = (response, file) => { |
| | | if (response.code === 200) { |
| | | uploadedBlobIds.value.push(response.data.id); // â
ä¿åID |
| | | ElMessage.success(`æä»¶ ${file.name} ä¸ä¼ æå`); |
| | | } |
| | | }; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## åãæä½³å®è·µå»ºè®® |
| | | |
| | | ### 10.1 åæ°å½åä¸è´æ§ |
| | | |
| | | â
**åç«¯åæ°åä¸å端å®ä½åæ®µä¿æä¸è´** |
| | | ```javascript |
| | | // å端 |
| | | { |
| | | knowledgeBaseId: 10, |
| | | storageBlobIds: [123] |
| | | } |
| | | |
| | | // å端å®ä½å段 |
| | | private Long knowledgeBaseId; |
| | | private List<Long> storageBlobIds; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 10.2 åæ°ç±»åä¸è´æ§ |
| | | |
| | | â
**æç¡®åæ°ç±»å,é¿å
èªå¨ç±»å转æ¢** |
| | | ```javascript |
| | | // æ°å¼ç±»å |
| | | const id = 10; // number |
| | | const count = 0; // number |
| | | |
| | | // å符串类å |
| | | const title = ""; // string |
| | | const type = ""; // string |
| | | |
| | | // æ°ç»ç±»å |
| | | const ids = []; // array |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 10.3 å¿
å¡«åæ°æ ¡éª |
| | | |
| | | â
**å¨è°ç¨æ¥å£åæ ¡éªå¿
å¡«åæ°** |
| | | ```javascript |
| | | const saveFiles = async () => { |
| | | if (!currentKnowledgeBase.value?.id) { |
| | | ElMessage.error("ç¥è¯åºä¿¡æ¯å¼å¸¸"); |
| | | return; |
| | | } |
| | | |
| | | if (uploadedBlobIds.value.length === 0) { |
| | | ElMessage.warning("请å
ä¸ä¼ æä»¶"); |
| | | return; |
| | | } |
| | | |
| | | // ...è°ç¨æ¥å£ |
| | | }; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 10.4 åæ°é»è®¤å¼ |
| | | |
| | | â
**为å¯éåæ°è®¾ç½®åççé»è®¤å¼** |
| | | ```javascript |
| | | const form = { |
| | | title: "", |
| | | type: "", |
| | | usageCount: 0, // â
æ°å¼ç±»åé»è®¤å¼ä¸º0 |
| | | creator: userStore.nickName || "" // â
使ç¨å½åç¨æ·åä½ä¸ºé»è®¤å¼ |
| | | }; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 10.5 URLè·¯å¾åæ° |
| | | |
| | | â
**è·¯å¾åæ°ä½¿ç¨æ¨¡æ¿å符串** |
| | | ```javascript |
| | | const url = `/knowledgeBase/vector/status/${knowledgeBaseId}`; |
| | | const url = `/knowledgeBase/vector/reprocess/${vectorId}`; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## åä¸ãåæ°æ å°å
³ç³»æ»ç» |
| | | |
| | | ### ç¥è¯åºIDç¸å
³ |
| | | | åºæ¯ | åæ°å | ç±»å | æ¥æº | |
| | | |------|--------|------|------| |
| | | | ç¥è¯åºå表æ¥è¯¢ | - | - | URLè·¯å¾æ åæ° | |
| | | | ç¥è¯åºè¯¦æ
| id | Long | URLè·¯å¾åæ° | |
| | | | æä»¶å
³èä¿å | knowledgeBaseId | Long | POST bodyåæ° | |
| | | | åéåç¶ææ¥è¯¢ | knowledgeBaseId | Long | URLè·¯å¾åæ° | |
| | | | ç¥è¯é®ç | knowledgeBaseId | Long | POST bodyåæ° | |
| | | |
| | | --- |
| | | |
| | | ### æä»¶IDç¸å
³ |
| | | | åºæ¯ | åæ°å | ç±»å | æ¥æº | |
| | | |------|--------|------|------| |
| | | | æä»¶ä¸ä¼ ååº | data.id | Long | ååºæ°æ®(ä½ä¸ºstorageBlobId) | |
| | | | æä»¶å
³èä¿å | storageBlobIds | Long[] | POST bodyåæ° | |
| | | | æä»¶å é¤ | ids | Long[] | DELETE bodyåæ°(åéè®°å½ID) | |
| | | | éæ°åéå | vectorId | Long | URLè·¯å¾åæ° | |
| | | |
| | | --- |
| | | |
| | | ### ä¼è¯IDç¸å
³ |
| | | | åºæ¯ | åæ°å | ç±»å | æ¥æº | |
| | | |------|--------|------|------| |
| | | | ç¥è¯é®ç | memoryId | String | å端çæUUID | |
| | | | é®çå岿¥è¯¢ | memoryId | String | URLè·¯å¾åæ° | |
| | | |
| | | --- |
| | | |
| | | ## åäºãéå½ |
| | | |
| | | ### éå½A: åæ°ç±»å对ç
§è¡¨ |
| | | |
| | | | åæ°ç±»å | JavaScript | Java | MySQL | |
| | | |----------|------------|------|-------| |
| | | | ID | number/Long | Long | BIGINT | |
| | | | æ é¢ | String | String | VARCHAR | |
| | | | ç±»å | String | String | VARCHAR | |
| | | | ç¶æ | Integer | Integer | TINYINT | |
| | | | æ°é | Integer | Integer | INT | |
| | | | æ¶é´ | String/Date | LocalDateTime | DATETIME | |
| | | | æ°ç» | Array | List | - | |
| | | |
| | | --- |
| | | |
| | | ### éå½B: HTTPæ¹æ³ä¸ä¼ åä½ç½®å¯¹ç
§è¡¨ |
| | | |
| | | | HTTPæ¹æ³ | ä¼ åä½ç½® | requesté
ç½® | éç¨åºæ¯ | |
| | | |----------|----------|--------------|----------| |
| | | | GET | URLåæ° | `params: query` | æ¥è¯¢ãå表 | |
| | | | POST | 请æ±ä½ | `data: data` | æ°å¢ãæ´æ°ãä¿å | |
| | | | DELETE | 请æ±ä½ | `data: ids` | å é¤ãæ¹éå é¤ | |
| | | | PUT | 请æ±ä½ | `data: data` | æ´æ°(é¨å使ç¨POST) | |
| | | | æµå¼POST | 请æ±ä½ | `body: JSON.stringify()` | AIé®ç | |
| | | |
| | | --- |
| | | |
| | | ### éå½C: åéåç¶æå¼å¯¹ç
§è¡¨ |
| | | |
| | | | ç¶æå¼ | ç¶æåç§° | å端æ¾ç¤º | æ ç¾é¢è² | |
| | | |--------|----------|----------|----------| |
| | | | 0 | å¾
å¤ç | "å¾
å¤ç" | info (ç°è²) | |
| | | | 1 | å¤çä¸ | "å¤çä¸" | warning (æ©è²) | |
| | | | 2 | 已宿 | "已宿" | success (绿è²) | |
| | | | 3 | 失败 | "失败" | danger (红è²) | |
| | | |
| | | --- |
| | | |
| | | ## åä¸ãæ»ç» |
| | | |
| | | æ¬ææ¡£è¯¦ç»è§èäºç¥è¯åºæ¨¡åçåæ°å½ååä¼ åæ¹å¼,éµå¾ªä»¥ä¸åå: |
| | | |
| | | 1. â
**å½åä¸è´æ§**: ååç«¯åæ°åä¿æä¸è´(驼峰å½å) |
| | | 2. â
**ä¼ åè§èæ§**: GETç¨paramsãPOSTç¨dataãDELETEç¨data |
| | | 3. â
**ç±»åæç¡®æ§**: æç¡®åæ°ç±»å,åç设置é»è®¤å¼ |
| | | 4. â
**æ ¡éªå®æ´æ§**: å¿
å¡«åæ°éæ ¡éª,å¯éåæ°æé»è®¤å¼ |
| | | 5. â
**é误é¿å
**: éµå¾ªè§èé¿å
常è§é误 |
| | | |
| | | 建议å¢éæåä¸¥æ ¼éµå¾ªæ¬è§è,ç¡®ä¿ååç«¯åæ°ä¼ éçä¸è´æ§åå¯é æ§ã |