# KnowledgeMesh
**Repository Path**: miao-qing233/knowledge-mesh
## Basic Information
- **Project Name**: KnowledgeMesh
- **Description**: 分布式知识问答服务
- **Primary Language**: Java
- **License**: EPL-1.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2025-02-28
- **Last Updated**: 2025-04-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: deepseek, Milvus, MongoDB, ollama, onnx
## README
# 项目介绍
### 项目结构
knowledge-mesh/
├── knowledge-mesh-api/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── mq/
│ │ │ │ └── knowledge/
│ │ │ │ └── mesh/
│ │ │ │ ├── constant/
│ │ │ │ ├── DTO/
│ │ │ │ └── entity/
│ │ │ └── resources/
│ │ └── test/
│ ├── target/
│ │ └── knowledge-mesh-api.iml
│ └── pom.xml
├── knowledge-mesh-biz/
│ ├── logs/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── mq/
│ │ │ │ └── knowledge/
│ │ │ │ └── mesh/
│ │ │ │ ├── config/
│ │ │ │ ├── controller/
│ │ │ │ ├── repository/
│ │ │ │ ├── service/
│ │ │ │ └── util/
│ │ │ ├── resources/
│ │ │ └── KnowledgeMeshBizApplication.java
│ │ └── test/
│ ├── target/
│ │ └── knowledge-mesh-biz.iml
│ ├── pom.xml
│ └── logs/
├── .gitignore
├── java使用Milvus 使用问题与知识点整理笔记.md
├── pom.xml
└── README.md
### 运行方式
1. 启动Milvus服务
2. 启动naocs服务
3. 启动MongoDB服务
4. 启动ollama服务
5. 替换bootstrap.yml配置参数
6. 启动本项目
### 运行效果
1. 输入问题,返回答案 使用/api/qa/ask接口
```aidl
2025-03-13 16:32:17.606 INFO [http-nio-6801-exec-7] com.mq.knowledge.mesh.controller.QAController : question: 你会做什么
2025-03-13 16:32:17.608 INFO [http-nio-6801-exec-7] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 🚀 请求参数详情:
Method: POST
URL: http://localhost:11434/v1/chat/completions
Headers:
Body: {"stream":true,"temperature":0,"messages":[{"role":"user","content":"你会做什么"}],"model":"deepseek-r1:7b"}
2025-03-13 16:32:17.608 INFO [http-nio-6801-exec-7] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : Sending request to http://localhost:11434/v1/chat/completions with model: deepseek-r1:7b, prompt: 你会做什么
2025-03-13 16:32:20.251 INFO [OkHttp http://localhost:11434/...] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 收到的状态响应: 200
2025-03-13 16:32:26.559 INFO [OkHttp http://localhost:11434/...] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 流结束处理
作为一个通用领域的人工智能,我可以帮助您回答问题、提供信息、进行创意交流或进行愉快的聊天。您不管有什么话题都可以找我聊聊~
```
2. 录入知识库知识 使用/api/qa/addKnowledge接口
```aidl
2025-03-13 16:33:51.138 INFO [http-nio-6801-exec-10] com.mq.knowledge.mesh.controller.QAController : content: {
"content":"你是个全栈开发工程师"
}
2025-03-13 16:33:51.190 INFO [http-nio-6801-exec-10] com.mq.knowledge.mesh.service.impl.MilvusServiceImpl : 插入向量:[0.008249697, -0.011008951, 0.03555721, 0.018347697, 0.045204915, -0.033010125, -0.117574014, 0.03613492, -0.025644938, 0.023178266, 0.10068291, -0.3185076, -0.074609205, 0.033979114, -0.05582664, 0.01335794, 0.07432443, 0.03509621, 0.030611567, 0.023089496, 0.018785771, -0.014443959, -0.036269534, -0.027746562, -0.01583581, -0.0052314983, -0.02628565, 0.038367745, -0.06831295, -0.088695854, 0.056959186, -0.04021206, 0.046274506, -0.0042574103, -0.037456624, -0.0010505602, 0.012976998, -0.039247617, -0.06733959, 0.004960076, 0.018278185, 0.05277289, -0.0019115331, -0.022251436, -0.01366424, -0.01765673, -0.008882416, 0.04512301, 0.0028534061, -2.4305789E-4, 0.052854195, 0.039775956, 0.029527968, 0.029629722, 0.06915898, -0.0822947, 0.038864546, 0.029590152, -0.006330489, 0.067697175, 0.04392748, -0.06618734, 0.01901122, -0.03242876, -0.039461914, -0.0667419, 0.01052108, 0.04701626, -0.025957026, 0.038626928, -0.015268715, 0.045065418, -0.005414066, -0.07490156, 0.05620828, -0.012204394, -0.014369658, 0.01013109, -0.02373118, 0.0066117276, 0.0584898, 0.042529847, 0.025445625, -0.009352611, -0.018042078, -0.044535093, -0.028135968, -0.010831806, -0.0020650723, -0.015503776, 0.021741206, -0.022301793, 0.043746825, -0.018316891, -0.05297914, 0.03981414, -0.059156813, 0.05154691, 0.0021889932, -0.02787944, -0.017669922, 0.003845199, -0.006302196, -0.06833023, -0.040061075, -0.00871892, 0.03254538, -0.08319164, 0.025048655, -0.05259067, -0.06284476, -0.027020691, 0.02245538, 0.029677149, -0.01675747, -0.010425029, -0.021032413, -0.0018983321, -0.01488315, 0.05092404, 0.018854998, 0.011119703, 0.031054312, -0.06342668, -0.05340008, 0.013926445, -0.023162346, -0.029342279, 0.04227332, 0.008627144, 0.009864167, 0.04359852, 0.0187723, -0.011814766, -0.023441229, -0.0632424, -0.0011134484, 0.037204262, -0.064478666, -0.01124496, 0.010861628, -0.01847509, -0.055432353, -0.07381851, 0.11216341, -0.10104611, 0.026587902, 0.03825054, -0.009387646, -0.009959646, 0.019653445, -0.05971304, -0.032178935, -0.04787609, 0.0010220082, 0.013895623, -0.019770093, 0.03158272, -0.079974234, -0.04571421, 0.045113694, -0.045422617, 0.0019157635, 0.06496357, 0.0015277998, -0.07598332, -0.04257849, 0.025245573, 0.017117603, 0.0067693945, 0.037248682, 0.0011857526, -0.01978222, -0.044663157, -0.0050297175, -0.015975166, -0.012241559, 0.016737336, -0.06516363, 0.0010395751, 0.06129049, -0.026798422, 0.024076082, 0.010997685, -0.03635006, 0.026266998, 0.02515117, -0.031751476, 0.046359394, -0.019060062, -0.0062533235, -0.020980347, -0.010793667, -0.011933705, 0.032365, 0.057346392, 0.028909305, 0.09167688, -0.017027995, -0.042642467, 0.016367067, -0.02010987, 0.0023268443, 0.010625674, 0.03127328, 0.0031964919, 0.023653215, -0.057460263, 0.054672085, -0.026495783, 0.017686171, -0.05647329, -0.026879286, -0.013213556, -0.0025652014, 0.0064298394, 0.017064923, 0.027950361, 0.025878234, 0.0150628025, -0.0071102204, 0.021084009, 0.026265655, -0.017155733, -0.006914809, 0.07466405, -0.015142554, 0.008705159, 0.047036678, 0.039771628, 0.008875482, 0.016162045, 0.044756155, -0.044483528, 0.055361167, -0.053131852, -0.08924061, 0.041847017, 0.041454434, 0.0134323, 0.014648305, 0.13582869, 0.018020082, 0.11564706, -0.03576933, 0.007967561, -0.016963977, 0.044735935, 0.016753493, -0.0042499793, -0.008067382, -0.015468847, -0.04692601, 0.00823024, -0.038419943, -0.05321314, -0.02095245, 0.02637313, 7.3152035E-4, -0.018669704, 0.055230893, 0.09180947, 0.0044977022, -0.046949964, -0.022201829, -0.018324245, -0.022718044, 0.0101593565, -0.045498665, -0.0022961802, -0.010539443, 0.013901736, -0.012627557, -0.024100889, 0.0100012785, 0.0381267, -0.0430788, 6.944766E-4, 0.052943278, -0.048491888, -0.030244553, -0.0020640274, -0.02778655, -0.014220571, -0.064647935, -0.058283325, -0.09536445, 0.01674824, -0.012322925, 0.040276084, 0.0388522, 0.06278658, 0.036789194, 0.012795213, -0.032895505, -0.058618262, -0.04961117, -0.02380938, 0.038038883, -0.0145183, -0.00532876, 0.062116973, -0.019896816, -0.07080421, -0.01503238, 0.012196859, 0.0112030525, 0.008471369, -0.0021328174, 0.019953497, -0.0023045826, -0.009381083, 0.012515641, 0.018041877, 0.061068855, -0.016192555, 0.0074725696, -0.026303178, -0.05383833, -0.030910423, -0.039792802, 0.015788328, 0.026451414, 0.012900252, 0.032446805, 0.02030488, 0.011598636, -0.03433466, 0.010012908, -0.031656053, -0.09301676, -0.006430272, 0.015074508, 0.01064441, 0.011158315, 0.048033234, -0.021758048, -0.03557324, 0.05746623, 0.032223217, -0.028645992, 3.4004697E-5, 0.008608651, 0.032381307, -0.0047187186, -0.0014731184, 0.026823146, -0.024416633, -0.042159125, 0.029380867, 0.008211314, -0.044333044, -0.024849428, -0.022645868, -0.03721556, -0.09996564, 0.04981272, -0.016360225, 0.02674601, -0.0017378321, -0.008056769, 0.004863824, -0.032608237, 0.046171363, 0.009222896, 0.017524576, 0.01309689, 0.018279394, 0.016865281, 0.018192284, -0.055145487, 0.012482453, 0.006005421, -0.045605443, -0.05129069, -0.09178039, 0.0027753443, -0.07372999, 0.017955722, 0.064466156, -0.025724197, 0.01889508, 0.07213436, -0.044251055, 0.09649887, -0.09143369, -0.036782492, 0.00343706, -0.029073296, 0.08936775, 0.024573369, 0.015977003, 0.046978563, 0.040677782, 0.025736485, -0.09494533, -0.012197048, -0.08448792, -0.007148863, -0.026472624, -0.05594502, -0.010428499, -0.05696128, 0.045358513, -0.04597603, 5.0294853E-4, -0.029695878, 0.0024729616, 0.018489331, 0.06722275, 0.25183794, 0.013256466, 0.017237669, -0.02291647, 0.031567838, 0.07942266, -0.05116775, 0.036357198, 0.007975302, 0.002629588, 0.08113438, -0.020996198, -0.030897375, -0.023783404, 0.002653018, -2.572575E-4, -0.007550827, 6.992533E-4, -0.08755373, 0.051693447, -0.021996146, -0.03796715, 0.027274169, -0.03211536, 0.0809922, -0.0348074, -0.022032686, -0.01028772, 0.058591668, 0.03355348, 0.02162124, 0.014772421, -0.029336708, 0.03032626, 0.010515533, 0.0068714204, -0.008920333, 0.027794005, -0.054994453, -0.022923972, -0.04251575, 0.04540091, -0.025726527, 0.05885155, 0.00861663, 0.001016285, -0.092509046, -0.048281368, 0.041881576, -0.014715821, -0.024823619, -0.042754304, -0.014936782, 0.0010268922, -0.09342361, 0.033290595, 0.058944687, -0.021271588, -0.06450286, -0.01023114, -0.0837664, -0.07491157, 0.03104471, 0.04604702, -0.011907991, 0.09733382, -0.07993166, 0.004214525, 0.0020719192, 0.01726681, 0.0025732673, -0.036622487, 0.046678126, -0.028088408, 0.030756492, 0.08881939, 0.0136522, 0.039037503, -0.036399838, -0.025627747, -0.03277618, 0.05912228, -0.0295564, -0.020939015, 0.02498825, 0.024213014, -0.01202275, -0.020680888, -0.054273956, -0.014353078, -0.010136556, -0.07266811, -0.039458785, -0.021659872, -0.006630555, -0.028464895, 0.09553709, 0.05656709, -0.02756137, -0.047328107, 0.01766293, -0.011168496]
2025-03-13 16:33:51.263 INFO [http-nio-6801-exec-10] org.eclipse.jetty.util.log : Logging initialized @837923ms to org.eclipse.jetty.util.log.Slf4jLog
2025-03-13 16:33:51.277 INFO [http-nio-6801-exec-10] com.mq.knowledge.mesh.service.impl.MilvusServiceImpl : milvus向量数据库插入数据成功: "status {\n}\nIDs {\n int_id {\n data: 456609799775572068\n }\n}\nsucc_index: 0\ninsert_cnt: 1\ntimestamp: 456616792869306371\n"
{
"code": 0,
"msg": null,
"data": true
}
```
3. 使用带知识库内容的问答接口 使用/api/qa/askWithBackgroundKnowledge
```aidl
2025-03-13 16:35:59.407 INFO [http-nio-6801-exec-2] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 构建背景知识:你是什么
2025-03-13 16:35:59.458 INFO [http-nio-6801-exec-2] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 问题向量化后的内容:[{"你是什么":[0.029125327,-0.050299775,0.07612264,0.006294931,0.022941351,0.0071217376,-0.035437007,0.04969397,-0.046920918,0.0054035033,0.07926043,-0.29682475,-0.03566598,-0.022689968,0.0064094444,-0.010200699,0.012437076,0.014685948,-0.04646573,0.023465622,0.034406472,-0.04521271,0.065771155,0.0253849,0.012285266,0.053319134,0.009915728,-0.08536596,-0.04346956,-0.071395025,-0.014761111,-0.04941009,0.054487363,-0.0069405823,-0.037622333,-0.042488147,-0.07043211,0.09369584,-0.031123769,0.008094837,0.009578743,-0.04878373,0.012157816,-0.06448246,0.0049459194,-0.035777453,-0.06418073,0.08472425,-0.05127579,-0.01837837,0.0069269137,-0.049466763,0.015633935,0.0068964474,0.028012656,-0.03939918,0.037849065,-0.0050089015,0.017756457,0.009776789,0.0038532126,-0.056060858,-0.035972748,4.0069755E-4,0.014404007,0.015442634,-0.04645541,9.554661E-4,-0.039290786,0.03510736,-0.009108342,-0.014883995,-0.012490514,-0.034412615,0.037248693,0.06592948,0.024188539,0.037380487,-0.014491461,-0.022521904,0.035142407,0.029033395,0.057096127,0.011113251,-0.011485345,2.9856697E-4,-0.044005882,-0.022614345,0.018971916,-0.09522431,-0.057567786,-0.06701723,0.037800934,0.0775134,-0.009262505,-0.030013166,-0.08942559,-0.036594063,0.039043974,-0.005812329,0.04940958,-0.009351686,0.02513377,3.0845476E-4,-0.038486324,0.008182004,0.019063132,-0.061368205,0.0098007815,0.015499197,-0.052412704,-0.04131002,-0.07538585,-0.005944244,0.0034846652,0.040741708,0.001942334,0.009434399,-0.049207658,0.107875936,0.02915674,-0.0065104947,0.06083394,-0.058273982,-0.087650605,0.0018664475,0.01823904,0.0036964025,0.0017080164,-0.08239196,0.08622027,0.0650326,0.008413105,0.0037138585,0.034895927,-0.0079739,-0.057084974,0.09394613,-0.062419757,-0.0015454589,0.06478039,-0.031191828,-0.0729879,-0.0723275,0.030523872,0.025773535,0.010163359,0.057671335,0.034347,0.07586595,0.05155954,-0.05352159,-0.022565093,-0.048513368,-0.06799624,-0.05390294,-0.0398952,0.054527704,-0.04158506,-0.048563443,-0.0018672812,-0.018432438,-1.7610137E-4,0.06614109,-0.0051250146,-0.09394539,-0.04721847,0.03445859,-0.039737526,0.0017980546,0.013483492,-0.017146852,-0.091673344,-0.009594218,-0.032698777,-0.058263063,-0.050089546,-0.017126486,-0.029486759,-0.042402778,-0.05896022,0.05047602,-0.016938096,-0.025104715,-0.009852094,0.029501135,0.002183553,-0.027934514,0.049309466,0.06956313,-0.066856205,-0.022346565,0.036368567,-0.008683829,0.054284945,-0.0068329438,-0.025062041,-0.0024096845,-0.07038878,-0.044353615,0.031308364,0.043953832,0.059580978,0.054741986,0.0010187998,-0.03141245,-0.03992549,0.057590246,8.280978E-5,-0.084753126,0.0064920713,-0.0011052022,-0.03037811,0.001319332,0.014422982,0.013530222,0.053881865,0.023322923,0.0058163577,0.034392245,0.037440363,-0.06306082,0.037116516,-0.067268796,-0.0024327412,0.049387284,-0.02846613,-0.022382863,0.014831943,0.06482353,0.07571081,0.021401996,-0.0043898313,-0.0061797965,0.04508075,0.023130527,0.0216747,-0.0339997,0.0088959,-0.05526703,-0.022233754,0.07691583,-0.053441685,0.069383815,-0.016550671,-0.005392599,-0.05583517,0.0070688985,-0.04085187,0.010919112,0.03404845,0.0028997047,-0.01917691,-0.051456258,-0.005226491,-0.03525633,0.019232398,-0.08264223,-0.013622827,0.03648065,-0.02249157,0.0073326663,-0.0097436765,0.027748028,-0.015589025,0.028804738,0.029678494,0.01438325,-0.028494092,-0.090938024,0.021954065,-0.055936083,0.034672663,-0.0111196535,0.0054187546,-0.07831478,-0.046111103,0.0076117204,0.055951376,0.013059804,0.022661908,0.013877076,-0.013434215,0.011340597,-0.08239505,0.038373973,-0.05256272,0.042569146,-0.047532257,0.0025873003,0.010011596,0.044596102,0.0490794,-0.004066085,-0.072642855,0.034158096,0.026037345,-0.077030815,0.046914574,0.008850511,0.017106054,0.03212562,0.044729326,-0.07074044,-0.036294308,-0.0013572269,0.061981816,-0.07824764,0.032681696,0.025765693,-0.0012227811,-0.017449979,-0.047548093,-0.0691611,0.038519364,-0.0022674836,0.03202294,-0.016243149,-0.06306784,0.006654162,-0.023235885,0.020244272,-0.006108336,0.006988011,0.04297972,1.2716823E-4,0.04241964,0.013446291,0.0050527044,-0.007370942,0.08375223,0.0342205,0.0027350045,0.0010842388,0.00380284,-0.014117486,-0.015562269,-0.069428,-0.0038806666,9.42387E-4,0.021330751,-0.030648552,0.040068973,0.020409293,-0.027873788,0.008533716,0.019973686,-0.053695668,-0.018308507,0.03157673,0.023556944,-0.050284583,-0.014014567,-0.042202983,0.068032265,-2.3654627E-4,0.13100693,-0.07011312,-0.019293552,0.03110079,-0.05521885,-0.008316547,-0.03808223,0.034697957,0.03915477,-0.044063155,-0.0043194816,0.009610465,0.06178172,0.017021935,-0.027717652,0.019847361,0.07014274,-0.020378405,-0.060315523,-0.06246705,0.017723478,-0.048574015,-0.042514976,0.014293174,0.0071640713,-0.017817432,0.06899744,-0.07029208,-3.1563995E-4,-0.053142145,-0.016460791,0.016133161,0.004826966,0.036590617,-0.033878043,-0.06824764,0.07611903,-0.018124416,0.058626514,-0.005411996,-0.011269439,0.035666574,-0.01136974,-0.017260198,0.042212456,0.030019209,-0.034603532,0.062042993,-0.0061988723,0.033169992,-0.0049549863,0.0049435487,0.02420775,-0.08675802,0.23240703,0.015599904,-0.010542632,0.032948487,0.035232693,0.053044945,-0.06533264,-0.029858328,0.04089122,-0.027626472,-0.020953516,-0.012145857,-0.004508497,-0.009822533,0.043160968,-0.038830664,-0.0073397257,-0.03739596,-0.09344639,0.020969093,0.06385774,-0.0070064687,-0.010855099,-0.036877263,0.0063027795,0.01321932,0.017317148,0.08233446,-0.05046381,-0.021236971,0.030909164,-0.0136915445,-0.0071994276,0.008171461,0.045267917,0.014363398,0.021380816,0.018650837,-0.0049632867,-0.01978364,0.016068779,0.029617194,-0.017095817,0.055612512,0.04879697,-0.046110746,-0.07774471,0.013918203,0.019616764,-0.023369484,0.004989107,-0.0295083,0.05074876,0.015977023,-0.089685984,-0.028984569,-0.006192984,0.04609918,-0.020458326,0.046410654,-0.06970906,-0.06795445,0.03059362,-0.06166058,0.044633463,0.007944883,-0.09968821,0.026749186,0.034426358,0.055327702,-0.059116557,-0.046640363,-0.009514819,0.0027359957,-0.028581554,0.05009522,0.016504835,6.999625E-5,-0.012115515,-0.019294698,-0.06930367,0.0363801,0.05980138,-0.023299256,0.011540904,0.014768219,-0.002753895,9.5662504E-4,0.024827957,0.021260448,0.03636816,-0.004894883,-0.01656601,0.009476736,-0.001342586,0.046492614,-0.0021245487,-0.008410033,-8.6926055E-5,0.03177267,-0.0063052573,0.031627003]}]
ID: 456588401977857279 Distance: 0.8857261
2025-03-13 16:35:59.734 INFO [http-nio-6801-exec-2] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 查询到的向量id列表:[456588401977857279]
2025-03-13 16:35:59.736 INFO [http-nio-6801-exec-2] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 🚀 请求参数详情:
Method: POST
URL: http://localhost:11434/v1/chat/completions
Headers:
Body: {"stream":true,"temperature":0,"messages":[{"role":"user","content":"请严格基于以下背景知识回答问题\n背景知识:\n{\r\n \"question\":\"你是谁\"\r\n}问题:你是什么"}],"model":"deepseek-r1:7b"}
2025-03-13 16:35:59.737 INFO [http-nio-6801-exec-2] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : Sending request to http://localhost:11434/v1/chat/completions with model: deepseek-r1:7b, prompt: 你是什么
2025-03-13 16:36:02.085 INFO [OkHttp http://localhost:11434/...] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 收到的状态响应: 200
2025-03-13 16:36:33.793 INFO [OkHttp http://localhost:11434/...] com.mq.knowledge.mesh.service.impl.OllamaStreamServiceImpl : 流结束处理
好的,我现在要回答用户的问题:“你是什么”。根据提供的背景知识,我需要详细解释我的身份和功能。首先,我要明确自己是一个AI助手,由中国的深度求索(DeepSeek)公司开发。我的主要职责是提供信息解答、对话支持等服务。接下来,我应该说明我可以帮助用户获取信息、回答问题以及提供建议。同时,要强调我无法处理图片、视频、音频等文件,并且会严格遵守相关法律法规。最后,我要确保语言简洁明了,让用户清楚了解我的功能和限制。我是由中国的深度求索(DeepSeek)公司开发的智能助手。我的主要职责是提供信息解答、对话支持等服务。我能够帮助您获取信息、回答问题以及提供建议。同时,我也无法处理图片、视频、音频等文件,并且会严格遵守相关法律法规。
```


### 项目依赖介绍
以下是对项目依赖的总结:
#### 一、核心技术栈
| 分类 | 组件 | 版本 | 说明 |
|------------------|-----------------------------|--------------|-------------------------------|
| 基础框架 | Spring Boot | 3.3.3 | 核心开发框架(升级版本) |
| 微服务 | Spring Cloud Alibaba | 2023.0.1.0 | 微服务解决方案(适配 Spring Boot 3.x) |
| 日志 | Log4j2 | (继承Spring) | 替代默认logging实现 |
| 数据库 | MongoDB | (继承Spring) | 文档数据库支持 |
| 向量数据库 | Milvus SDK Java | 2.4.10 | 向量相似性搜索功能 |
| 大模型集成 | Spring AI Ollama | 1.0.0-M6 | 问答流程优化(流式响应自动化处理)|
#### 二、核心功能依赖
| 分类 | 组件 | 版本 | 作用 |
|------------------|-----------------------------|---------------|--------------------------------------|
| 模型推理 | ONNX Runtime | 1.16.0 | 机器学习模型推理引擎 |
| HTTP客户端 | OkHttp | 4.9.0 | 高效的HTTP通信库 |
| 工具库 | Hutool | 5.3.1 | 常用工具集 |
| 代码简化 | Lombok | 1.18.30 | 自动生成样板代码 |
| JSON处理 | Jackson | 2.15.3 | 升级至最新稳定版本 |
#### 三、通信协议相关
| 组件 | 版本 | 用途 |
|--------------------------|-----------|--------------------------------------|
| grpc-netty-shaded | 1.54.1 | Milvus通信基础 |
| grpc-protobuf | 1.54.1 | Protobuf协议支持 |
| grpc-stub | 1.54.1 | gRPC客户端存根 |
#### 四、JSON处理
| 库 | 版本 | 特点 |
|-------------------------|-----------|--------------------------------------|
| Jackson | 2.13.5 | Spring默认JSON处理器 |
| Gson | 2.10.1 | 补充JSON解析能力 |
#### 五、构建配置
| 插件 | 版本 | 功能 |
|-------------------------------|---------------|-------------------------------------|
| maven-compiler-plugin | 3.3.3 | 支持 Spring Boot 3.x 的打包 |
| spring-boot-maven-plugin | 2.7.3 | 可执行JAR打包 |
### 项目架构图
```mermaid
graph TD
%% 客户端与控制器交互
A[客户端] -->|HTTP请求| B[QAController]
B -->|调用流式问答| C[OllamaStreamServiceImpl]
B -->|调用知识库操作| D[KnowledgeableServiceImpl]
B -->|添加知识| D
%% Ollama服务流程
C -->|文本向量化| E[OnnxServiceImpl]
E -->|调用模型| F[ONNX模型]
E -->|依赖分词器| G[BgeSmallZhTokenizer]
C -->|向量相似性查询| H[MilvusServiceImpl]
H -->|操作向量数据库| I[Milvus]
C -->|拼接背景知识| J[KnowledgeableServiceImpl]
J -->|查询MongoDB| K[MongoDB]
C -->|调用外部API| L[Ollama服务]
%% 知识库操作流程
D -->|文本分块向量化| E
D -->|存储向量ID与文本| K
D -->|插入向量数据| H
%% 初始化与配置
M[BgeModelConfig] -->|加载ONNX模型| F
N[InitConfig] -->|初始化Milvus集合/索引| I
```
---
### 核心代码总结
#### 一、 **核心组件**
| 组件 | 职责 |
|-----------------------|----------------------------------------------------------------------|
| `QAController` | 提供RESTful接口:问答接口、带知识库的问答接口、知识添加接口 |
| `OllamaStreamServiceImpl` | 处理流式问答逻辑,集成向量查询与Ollama API调用 |
| `KnowledgeableServiceImpl` | 知识库核心业务逻辑,处理文本导入/向量生成/存储 |
| `MilvusServiceImpl` | 实现向量插入和相似性查询(IVF_FLAT索引,L2距离计算) |
| `OnnxServiceImpl` | 调用BGE模型进行文本向量化,支持分块处理 |
| `BgeModelConfig` | 初始化ONNX模型(bge-small-zh.onnx) |
| `InitConfig` | 启动时初始化Milvus集合和索引 |
#### 二、 **关键技术栈**
```plaintext
- 向量计算: BGE模型(ONNX格式)
- 向量数据库: Milvus(IVF_FLAT索引,512维向量)
- 文档存储: MongoDB(存储向量ID与原始文本映射)
- 大模型交互: Ollama API(流式响应)
- 分词工具: 自定义BgeSmallZhTokenizer(支持中文按字符分词)
```
#### 三、 **核心流程**
1. **知识添加流程**
```
文本输入 → OnnxService分块向量化 → 插入Milvus → 向量ID与文本存入MongoDB
```
2. **问答流程**
```
用户问题 → OnnxService向量化 → Milvus相似性查询 → MongoDB检索背景知识 → 拼接Prompt调用Ollama → 流式返回结果
```
#### 四、 **关键代码片段**
```java
// 文本向量化分块处理(OnnxServiceImpl)
public List