精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在Ollama和Spring AI上使用本地AI/LLM查詢圖像數據庫

譯文
人工智能
本文介紹如何利用Ollama LLava模型和Spring AI,實現基于自然語言的圖像數據庫查詢,并支持高效向量搜索和圖像描述展示。

譯者 | 李睿

審校 | 重樓

AIDocumentLibraryChat項目的功能已經擴展到可以查詢圖像的圖像數據庫。它使用了可以分析圖像的Ollama的LLava模型。圖像搜索功能利用PostgreSQL的PGVector擴展來處理嵌入(Embeddings)。

架構

AIDocumentLibraryChat項目的架構見下圖:

Angular前端向用戶展示上傳和提問功能。Spring AI后端可以調整模型的圖像大小,使用數據庫存儲數據/向量,并使用Ollama的LLava模型創建圖像描述。

圖像上傳/分析/存儲流程見下圖:

圖像通過前端上傳。后端將其調整為LLava模型可以處理的格式。然后,LLava模型根據提供的提示生成圖像的描述。調整之后的圖像和元數據存儲在PostgreSQL的關系表中。然后使用圖像描述來創建嵌入。嵌入與元數據一起存儲在PGVector數據庫中的描述中,以在PostgreSQL表中找到相應的行。然后在前端顯示圖像描述和調整后的圖像。

圖像查詢的流程見下圖:

用戶可以在前端輸入問題。后端將問題轉換為嵌入,并在PGVector數據庫中搜索最近的條目。該條目包含圖像表中包含圖像和元數據的行ID然后,將圖像表數據與描述一起查詢并顯示給用戶。

后端

為了運行PGVector數據庫和Ollama框架,runPostgresql.sh和runOllama.sh文件中包含Docker命令。

后端需要application-ollama.properties文件配置以下條目

Properties files 
 # image processing
 spring.ai.ollama.chat.model=llava:34b-v1.6-q6_K
 spring.ai.ollama.chat.options.num-thread=8
 spring.ai.ollama.chat.options.keep_alive=1s

該應用程序需要使用Ollama支持(屬性:‘useOllama’)構建,并使用‘Ollama’配置文件啟動,需要激活這些屬性以啟用LLava模型并設置有用的keep_alive。只有當Ollama沒有自動選擇正確的線程數量時,才需要設置num_thread。

控制器(Controller

ImageController包含以下端點:

Java 
 @RestController
 @RequestMapping("rest/image")
 public class ImageController {
 ...
 @PostMapping("/query")
 public List<ImageDto> postImageQuery(@RequestParam("query") String 
 query,@RequestParam("type") String type) { 
 var result = this.imageService.queryImage(query); 
 return result;
 }
 
 @PostMapping("/import")
 public ImageDto postImportImage(@RequestParam("query") String query, 
 @RequestParam("type") String type, 
 @RequestParam("file") MultipartFile imageQuery) { 
 var result = 
 this.imageService.importImage(this.imageMapper.map(imageQuery, query), 
 this.imageMapper.map(imageQuery)); 
 return result;
 } 
 }

查詢端點包含‘postImageQuery(…)’方法,該方法接收包含查詢和圖像類型的表單,并調用ImageService來處理請求。

導入端點包含‘postImportImage(…)’方法,該方法接收帶有查詢(提示)、圖像類型和文件的表單。ImageMapper將表單轉換為ImageQueryDto和Image實體,并調用ImageService來處理請求。

服務

調用ImageService如下:

Java 
 @Service
 @Transactional
 public class ImageService {
 ...
 public ImageDto importImage(ImageQueryDto imageDto, Image image) {
 var resultData = this.createAIResult(imageDto);
 image.setImageContent(resultData.imageQueryDto().getImageContent());
 var myImage = this.imageRepository.save(image);
 var aiDocument = new Document(resultData.answer());
 aiDocument.getMetadata().put(MetaData.ID, myImage.getId().toString());
 aiDocument.getMetadata().put(MetaData.DATATYPE, 
 MetaData.DataType.IMAGE.toString());
 this.documentVsRepository.add(List.of(aiDocument));
 return new ImageDto(resultData.answer(), 
 Base64.getEncoder().encodeToString(resultData.imageQueryDto()
 .getImageContent()), resultData.imageQueryDto().getImageType());
 }

 public List<ImageDto> queryImage(String imageQuery) {
 var aiDocuments = this.documentVsRepository.retrieve(imageQuery, 
 MetaData.DataType.IMAGE, this.resultSize.intValue())
 .stream().filter(myDoc -> myDoc.getMetadata()
 .get(MetaData.DATATYPE).equals(DataType.IMAGE.toString()))
 .sorted((myDocA, myDocB) -> 
 ((Float) myDocA.getMetadata().get(MetaData.DISTANCE))
 .compareTo(((Float) myDocB.getMetadata().get(MetaData.DISTANCE))))
 .toList();
 var imageMap = this.imageRepository.findAllById(
 aiDocuments.stream().map(myDoc -> 
 (String) myDoc.getMetadata().get(MetaData.ID)).map(myUuid -> 
 UUID.fromString(myUuid)).toList())
 .stream().collect(Collectors.toMap(myDoc -> myDoc.getId(), 
 myDoc -> myDoc));
 return imageMap.entrySet().stream().map(myEntry -> 
 createImageContainer(aiDocuments, myEntry))
 .sorted((containerA, containerB) -> 
 containerA.distance().compareTo(containerB.distance()))
 .map(myContainer -> new ImageDto(myContainer.document().getContent(), 
 Base64.getEncoder().encodeToString(
 myContainer.image().getImageContent()),
 myContainer.image().getImageType())).limit(this.resultSize)
 .toList();
 }

 private ImageContainer createImageContainer(List<Document> aiDocuments, 
 Entry<UUID, Image> myEntry) {
 return new ImageContainer(
 createIdFilteredStream(aiDocuments, myEntry)
 .findFirst().orElseThrow(),
 myEntry.getValue(),
 createIdFilteredStream(aiDocuments, myEntry).map(myDoc -> 
 (Float) myDoc.getMetadata().get(MetaData.DISTANCE))
 .findFirst().orElseThrow());
 }

 private Stream<Document> createIdFilteredStream(List<Document> aiDocuments, 
 Entry<UUID, Image> myEntry) {
 return aiDocuments.stream().filter(myDoc -> myEntry.getKey().toString()
 .equals((String) myDoc.getMetadata().get(MetaData.ID)));
 }

 private ResultData createAIResult(ImageQueryDto imageDto) {
 if (ImageType.JPEG.equals(imageDto.getImageType()) || 
 ImageType.PNG.equals(imageDto.getImageType())) {
 imageDto = this.resizeImage(imageDto);
 } 
 var prompt = new Prompt(new UserMessage(imageDto.getQuery(), 
 List.of(new Media(MimeType.valueOf(imageDto.getImageType()
 .getMediaType()), imageDto.getImageContent()))));
 var response = this.chatClient.call(prompt);
 var resultData = new 
 ResultData(response.getResult().getOutput().getContent(), imageDto);
 return resultData;
 }

 private ImageQueryDto resizeImage(ImageQueryDto imageDto) {
 ...
 }
 }

importImage(…)方法中,將調用createAIResult(…)方法。它檢查圖像類型,并調用resizeImage(…)方法將圖像縮放到LLava模型支持的大小。然后使用提示文本和包含圖像、媒體類型和圖像字節數組的媒體創建Spring AI Prompt。然后,chatClient調用提示,并在‘ResultData記錄中返回響應,其中包含描述和調整大小的圖像。然后將調整大小的圖像添加到圖像實體中,并保留該實體。然后,在元數據中創建了包含嵌入、描述和圖像實體ID的AI文檔。最后使用描述、調整大小的圖像和圖像類型創建ImageDto并返回。

queryImage(…)’方法中,檢索并過濾元數據中圖像類型的AI文檔的最低距離的Spring AI文檔。按照最小的距離對文檔進行排序。然后加載帶有Spring AI文檔元數據ID的圖像實體。這樣就可以創建具有匹配文檔和圖像實體的ImageDtos。圖像以Base64編碼字符串的形式提供。這使得MediaType可以輕松地在IMG標簽中顯示圖像。

要顯示Base64 Png圖像,可以使用:‘<img src=”data:image/png;base64,iVBORw0KG…” />’

結果

用戶界面(UI)的結果見下圖:

該應用程序使用嵌入在向量數據庫中找到大型飛機。選擇第二張圖像是因為天空相似,而圖像搜索只花了不到一秒的時間。

結論

Spring AI和Ollama的支持為用戶提供了使用免費LLava模型的機會,這使得該圖像數據庫的實現變得容易。LLava模型可以生成圖像的良好描述,這些描述可以轉換為嵌入以進行快速搜索。Spring AI缺少對生成API端點的支持,因為參數‘spring.ai.ollama.chat.options.keep_alive=1s’需要Keep_alive =1s '來避免上場景窗口中有舊數據。LLava模型需要GPU加速才能有效使用。LLava僅用于導入,這意味著描述的創建可以異步完成。在中等性能的筆記本電腦上,LLava模型在一個CPU上運行,每張圖像的處理時間為510分鐘。與以前的實現相比,這樣的圖像搜索解決方案是一個巨大的進步。隨著采用更多GPU或CPU對人工智能的支持,這樣的圖像搜索解決方案將變得更加流行。

原文標題Questioning an Image Database With Local AI/LLM on Ollama and Spring AI作者:Sven Loesekann

責任編輯:華軒 來源: 51CTO
相關推薦

2025-03-31 09:30:52

2023-07-28 08:00:00

人工智能向量數據庫

2020-09-11 10:59:05

數據庫

2020-09-10 18:14:51

人工智能 IBM

2024-09-06 11:34:15

RustAI語言

2011-03-24 17:28:58

網絡數據庫

2025-03-28 07:33:09

數據庫AI助手設計

2011-07-26 14:34:28

openSUSEpostgresql

2017-06-13 10:15:50

人工智能深度學習神經網絡

2024-12-12 08:26:50

AI模型LLM大語言模型

2019-12-11 14:27:39

數據庫集群Kubernetes

2023-05-24 08:52:12

2024-05-22 12:07:12

向量數據庫AI

2025-07-22 09:07:04

2009-01-19 09:14:31

.NETMySQLMySql驅動包

2024-06-04 12:59:41

2025-07-11 03:10:00

LLMRAGAI

2022-08-03 10:45:04

人工智能網絡安全

2025-03-27 09:34:42

2023-09-15 08:00:20

點贊
收藏

51CTO技術棧公眾號

欧美色图在线观看| 中文字幕第一区| 欧美性受xxxx黑人猛交| 免费一级黄色录像| 欧美a在线观看| 天天综合色天天| 色999五月色| 午夜精品久久久久久久99热黄桃| 亚洲永久视频| 欧美成人亚洲成人| 欧洲av一区二区三区| 欧一区二区三区| 在线观看亚洲专区| 欧美一级爱爱视频| 国产对白叫床清晰在线播放| 国产激情一区二区三区桃花岛亚洲| 久久久亚洲天堂| 欧美一级特黄高清视频| 老汉色老汉首页av亚洲| 欧美剧情电影在线观看完整版免费励志电影 | 久久久久久久久久一级| 国产精品激情电影| www.日本久久久久com.| 18禁裸乳无遮挡啪啪无码免费| 久久九九精品视频| 欧美色手机在线观看| 日韩精品xxxx| 欧美日韩色网| 日韩久久一区二区| 日韩性感在线| 裸体xxxx视频在线| aaa欧美色吧激情视频| 亚洲自拍偷拍一区| 在线免费看av片| 日韩电影在线观看电影| 2020国产精品视频| 久久精品国产亚洲av香蕉 | 日本www在线视频| 成人福利在线观看视频| 国产精品色哟哟网站| 欧美午夜免费| 欧美在线一卡| 91麻豆高清视频| 国内精品久久久久久久果冻传媒| 国产国语亲子伦亲子| 国产一区激情在线| 成人免费视频在线观看超级碰| 亚洲婷婷久久综合| 青青草国产精品97视觉盛宴| 国产精品国产三级国产专播精品人| 国内精品福利视频| 久久aⅴ乱码一区二区三区| 88xx成人精品| 少妇一级淫片免费放中国| 日韩视频一区| 51视频国产精品一区二区| 自拍偷拍欧美亚洲| 国产精品日韩| 日本91av在线播放| 亚洲精品一区二三区| 日韩二区在线观看| 国产美女直播视频一区| 性高潮视频在线观看| 久久成人av少妇免费| 国产综合视频在线观看| 99久久国产热无码精品免费| 国产精品资源网| 懂色中文一区二区三区在线视频| 免费观看国产视频| 久久影院午夜论| 日本一区二区高清视频| 91在线高清| 亚洲免费av网站| 成人网站免费观看入口| 午夜影院一区| 欧美性三三影院| 久久精品国产99久久99久久久| 亚洲精品影片| 亚洲精品成人久久电影| www.久久国产| 日韩情爱电影在线观看| 欧美激情在线狂野欧美精品| 欧美三级午夜理伦| 蜜臀av一区二区三区| 亚洲最大福利网| 五月婷婷六月丁香| 亚洲国产精品成人综合| 在线观看17c| 成年美女黄网站色大片不卡| 欧美日韩小视频| 色综合久久久无码中文字幕波多| 校花撩起jk露出白色内裤国产精品| 国产亚洲aⅴaaaaaa毛片| 欧美视频www| 在线欧美福利| 国产精品久久91| 亚洲精品中文字幕成人片 | 日韩视频中文字幕在线观看| 亚洲精品影院在线观看| 国产精品视频精品| 日韩中文字幕观看| 中文字幕一区二区视频| 波多野结衣综合网| 亚洲福利影视| 亚洲欧美日韩国产中文| 日韩黄色免费观看| 三级不卡在线观看| 岛国视频一区免费观看| 午夜激情视频在线| 高潮白浆女日韩av免费看| 欧美成人三级在线播放| 欧美五码在线| 欧美乱大交xxxxx另类电影| www.久久网| 97精品视频在线观看自产线路二| 国产奶头好大揉着好爽视频| 欧美人体一区二区三区| 亚洲成年网站在线观看| 欧美成人777| 日本女优在线视频一区二区| 精品蜜桃一区二区三区| 在线观看电影av| 欧美挠脚心视频网站| 日韩中文字幕电影| 亚洲人体偷拍| 成人黄视频免费| 黄色网页网址在线免费| 精品视频在线免费| 欧美图片第一页| 在线综合视频| 国产一区二区三区黄| 91小视频xxxx网站在线| 欧美日韩极品在线观看一区| 加勒比一区二区| 亚洲伦伦在线| 国产手机精品在线| 三级资源在线| 日韩免费高清视频| www欧美com| 国产精品一区二区不卡| 国产手机视频在线观看| 亚洲免费一区| 精品精品国产国产自在线| 成人免费一区二区三区| 久久精品人人做人人爽人人| 各处沟厕大尺度偷拍女厕嘘嘘| 久久久亚洲欧洲日产| 国模吧一区二区三区| 蜜桃在线一区二区| 亚洲福利视频三区| 久久人妻少妇嫩草av无码专区| 激情91久久| 国内精品**久久毛片app| 国产免费拔擦拔擦8x高清在线人| 亚洲第一精品电影| 特一级黄色大片| ww亚洲ww在线观看国产| 久草综合在线观看| 成人3d动漫在线观看| 国产狼人综合免费视频| 69视频在线| 4438成人网| 国产在线一区视频| 久久嫩草精品久久久久| 一区二区三区国产免费| 国产精品久久久久久久久久10秀 | 亚洲AV无码精品色毛片浪潮| 亚洲国产日韩a在线播放性色| 日本一卡二卡在线| 久久综合图片| 美国av在线播放| 第一区第二区在线| 国产福利精品av综合导导航| 欧美成人二区| 精品国产一区二区精华| 9i看片成人免费看片| 国产精品网友自拍| 性一交一黄一片| 中文一区在线| 亚洲精品一卡二卡三卡四卡| 亚洲码欧美码一区二区三区| 91精品国产高清| av大片在线播放| 精品裸体舞一区二区三区| 99精品人妻国产毛片| 国产精品美女久久久久av爽李琼| 国产人妖在线观看| 久久福利精品| 91视频 - 88av| 在线成人动漫av| 91中文在线观看| 在线天堂资源www在线污| 日韩一二三在线视频播| 午夜成人鲁丝片午夜精品| 欧美日韩大陆在线| 日韩精品视频免费看| 国产精品美女一区二区三区 | 国产精品色在线观看| 欧美激情一区二区三区p站| 日韩电影在线看| 日韩五码在线观看| 欧美a级成人淫片免费看| 激情小说综合网| 国产一区二区三区黄网站| 欧美性一区二区三区| 午夜小视频福利在线观看| 亚洲欧美国产精品久久久久久久| 99热这里只有精品在线| 91福利精品视频| xxxx 国产| 亚洲欧美国产毛片在线| 亚洲欧美va天堂人熟伦| 丁香网亚洲国际| 日本高清一区二区视频| 石原莉奈在线亚洲二区| 免费拍拍拍网站| 中文字幕免费一区二区三区| 日本精品免费| 欧美挤奶吃奶水xxxxx| 96久久精品| 91嫩草国产线观看亚洲一区二区| 国产激情999| 伊伊综合在线| 97色在线视频| a级大胆欧美人体大胆666| 欧美大尺度在线观看| 免费的黄网站在线观看| 亚洲丝袜一区在线| 丝袜+亚洲+另类+欧美+变态| 欧美成人官网二区| va婷婷在线免费观看| 欧美精品精品一区| 中文字幕人妻精品一区| 91精品福利视频| 香蕉影院在线观看| 欧美日韩中文字幕| 国产免费观看av| 一本到不卡免费一区二区| 国产成人无码精品| 欧美午夜精品在线| www.毛片.com| 在线视频综合导航| www.日韩一区| 欧美色倩网站大全免费| www.亚洲激情| 欧美巨大另类极品videosbest| 一区二区美女视频| 91精品国产麻豆| 国产免费不卡av| 日韩一区二区精品在线观看| 精品国产18久久久久久| 精品日韩一区二区三区免费视频| 精品黑人一区二区三区国语馆| 日韩欧美一级片| 国精产品一品二品国精品69xx| 精品粉嫩超白一线天av| 婷婷丁香花五月天| 亚洲日韩中文字幕| 五月香视频在线观看| 久久精品久久久久| 主播国产精品| 高清欧美性猛交| 周于希免费高清在线观看 | 精品少妇一区二区三区在线| 一本色道久久综合亚洲精品高清 | 成人日韩在线观看| 国产精品视频一区国模私拍 | 欧洲一区二区在线| 欧美手机在线| 欧美h视频在线观看| 国一区二区在线观看| 18岁网站在线观看| 羞羞答答国产精品www一本| 波多野结衣天堂| 国产美女主播视频一区| 日韩免费高清一区二区| 久久精品一区蜜桃臀影院| 多男操一女视频| 亚洲成人av中文| 最新国产中文字幕| 日韩一区二区电影在线| 嫩草研究院在线观看| 精品国产一区二区在线| 国模精品视频| 91免费高清视频| 全球av集中精品导航福利| 午夜精品一区二区三区在线观看 | 欧美女人性生活视频| 麻豆视频一区二区| 你懂得在线视频| 国产精品剧情在线亚洲| 日本三级网站在线观看| 欧美日韩中字一区| 天天操天天射天天| 国产性xxxx| 亚洲视频tv| 亚洲高清电影| 色94色欧美sute亚洲线路一久| 公肉吊粗大爽色翁浪妇视频| 91久久在线| 奇米精品一区二区三区| 美女网站一区二区| 亚洲精品一区二区18漫画| eeuss国产一区二区三区| 国产真人真事毛片视频| 亚洲成人7777| 国产绿帽一区二区三区| 国产丝袜一区视频在线观看 | 久久久精品五月天| 麻豆精品国产传媒| 中文字幕成人在线观看| 青青操免费在线视频| 在线观看91精品国产麻豆| 青青草免费在线| 欧美激情一级二级| 国产成人视屏| 亚洲国产精品综合| 午夜综合激情| 欧美在线一级片| 一区二区欧美国产| 99久久国产热无码精品免费| 在线a欧美视频| 性欧美1819sex性高清| 国产精品手机视频| 欧美三级小说| 91 视频免费观看| 国产欧美日韩综合| 狠狠人妻久久久久久综合| 亚洲第一视频网| 欧美性爽视频| 91久久国产综合久久蜜月精品| 天天色综合色| 中文字幕66页| 国产精品乱子久久久久| 中文无码精品一区二区三区| 亚洲人成毛片在线播放| 伊人网在线播放| 久久久国产精品一区二区三区| 亚洲九九精品| 国产激情第一页| 婷婷综合另类小说色区| 日韩在线视频第一页| 国内精品久久久久久久| 成人另类视频| 黄网站欧美内射| 91片在线免费观看| 成人在线免费看视频| 亚洲社区在线观看| 亚洲天堂1区| 亚洲一卡二卡区| 久久99精品国产.久久久久久| 国产精品久久久免费看| 91精品婷婷国产综合久久性色 | 欧美一级小视频| 亚洲欧洲日韩在线| 国内精品久久久久久久久久久| 欧美国产在线电影| 久久国产精品色av免费看| jizzjizzxxxx| 国产日韩欧美亚洲| 一本久道久久综合无码中文| 伦伦影院午夜日韩欧美限制| 一区二区三区欧洲区| 丁香六月激情婷婷| 久久夜色精品国产噜噜av| wwwwww在线观看| 久久久精品在线观看| 第一区第二区在线| 国产成人综合一区| 亚洲四区在线观看| 蜜桃视频污在线观看| 国产精品99蜜臀久久不卡二区| 婷婷综合在线| 97人妻精品一区二区三区免费| 日本韩国欧美在线| www.在线视频| 久久久久se| 久久99久久99| 国产精品第108页| 国产亚洲精品一区二区| 国产精品成人**免费视频| 男人添女人下部高潮视频在观看| 久久久91精品国产一区二区精品 | 欧美老少做受xxxx高潮| 免费萌白酱国产一区二区三区| 无码人妻丰满熟妇区毛片18 | 精品国产免费观看| 国产一区二区三区免费视频| 久久九九精品视频| 精品久久久久久久免费人妻| 亚洲同性gay激情无套| 四虎电影院在线观看| 成人激情春色网| 久久久国产亚洲精品| 美女毛片在线观看| 中文字幕日韩精品有码视频| 国产精品videossex| 亚洲免费黄色录像| 欧美性猛交xxx| 日本伦理一区二区|