Сэрвіс семантычнага пошуку з вектарнай базай Pinecone за MCP-серверам
Шматразовы сэрвіс семантычнага пошуку: разбіваем PDF на фрагменты, захоўваем эмбедынгі ў вектарнай базе Pinecone і даем любому агенту пошук праз сервер FastMCP.
Крыніцы: Building a Semantic Search Pipeline with Pinecone and MCP
Мадэль мовы можа адказваць толькі на адказы, якія яна пазіла пад час навчання. Стандарты інжынерыі, інструкцыі, тэхнічныя характэрыстыкі продуктав і внутрашнія вікі для яе недоступныя, калі толькі гэтыя матэрыялы не будуць падаўлены пад час ставлення запытання. Опісаны тут прыем падтрымлівае работу з калекцыямі PDF: дакументы адразу вбудовваюцца ў Pinecone, і будзь-які ІІ-агент можа запытваць іх праз сервер MCP, створаны з FastMCP SDK.
Чаму пошук па ключоўых словах не ўсё
Звычны пошук па ключоўых словах здаецца явным рашэннем, але людзі рэдка калі формулююць запытання точна так, як гэта зроблена ў дасяглівай інструкцыі, таму рэлевантныя фрагменты прахоцяюць. Слоўнікі сынанімав і расшырэння запытання дапамагаюць, але оба залежаць ад стосункоў між словамі, якія хтось задаў вручную. Жадна з гэтых методаў не розумее значэння слоў.
Семантычныя пошукі выконваюцца іншым спосабам. Дакументы і запіты ператвараюцца ў вектарныя эмбеддынгі, якія кодуюць значэнне, а ступень адноснасці адначынаецца па прыроўненні гэтых вектараў за дапамогою косай схожасці — памеру таго, насколькі блізка два вектары прабіваюць у тым жа направленні ў просторэ эмбеддынга. Вышэйшы бал означае сільнейшую семантычную зв’язок, таму супаўзятлівыя фрагменты праказваюцца нават калі слоўнік абоўсумова разны. Запыт на кшталт «Як растэнні ператвараюць сонячнае святло ў энергію?» можа выявіць тэксты пра хлорапласты і фотасынтэзу, нават якіх ні аднаго тэрміна няма ў яму.
Две складовыя: база дадзенаў вектараў і сервер MCP
Сістэма складаецца з двух частак, якія можуць змініцца незалежна: канвейеру прыемкі дадзенаў і сервера MCP. Працэс прыемкі выконваецца аднае разы за кожны дакумент. Пасля чаго будзь-які падключаны агент можа знову і знову запытваць сервер пра тыя ж індэксаваныя ведамасці.
Працэс перакладу ператварае неапраныя PDF-файлы ў векторы, якія можна шукаты. У яму выкарыстоўваецца тэкст, які дзеляцца на перакрываючыяся часткі, ствараюцься эмбеддынгі за дапамою Pinecone Inference, а векторы запішываюцца ў індэкс Pinecone. Стварэнне эмбеддынга для вялікага колекцыі вімагае значных вычысловых рэсурсоў, таму просты журнал запобегае павтарэнню працы. Для кожнага індэксаванага файла зберагаецца час апэнсціі эмбеддынга. Пад час наступнага запуску працэса поручаецца час последніх змян кожнага файла з часам, збераглым раней. Документ, які змініўся, атрымвае новыя эмбеддынгі, а документ, які не змініўся, застаецца з існуючымі векторамі. База дадзенаў застаецца супараднай з змянамі дакументаў, і не адбываецца зайвых запытанняў на стварэнне эмбеддынга.
Сервер MCP, створаны на базе FastMCP, прымае запыт на натуральнай мове ад агента, уключае яго, адрабатвае пошук сэпадобнасці з Pinecone і вяртае тыя фрагменты, якія маюць найвышыя балы. Паколькі інтэрфейс — MCP, калькі аплікацыі AI можаць дзеліцца аднім сервісам адзыскання даных, не ведаючы ніч пра базу вектарных даных чы мадэль уключэння, якая стоіць за ёю.
Раздзелэнне эўх частак было намераваным. Змена модэляў уключэння, налагоджэнне падходу да фрагментавання чы перабудова вектарнага індэкса можа адбыцца без вплыву на інтэрфейс MCP чы на будзь-яго агента, які ад ньяго залежыць.
Стварэнне практыкуму уключэння і фрагментавання
PDF-ы створаны для людскага вока, а не для пошуку машынай, таму яны спачатку павінны стаць такім прэдставленнем, якое перадае значэнне. Працэс пачынаецца з выцягвання тэксту з кожнага файла за дапамою бібліятэкі pypdf у Python, чытання сторанак па сторанак і з’едынэння рэзультатаў у адну строчку для лёгкага адмаўлення пазней. Ён прымае як адзінкі файлы, так і цэлыя каталогі, таму новыя наборы дакументаў можна індэксаваць без змян у частцы, якая адпавядае за пошук.
Выбір спосабу часткавання
Пасля выкарыстоўвання тэксту дакумент раздзеляецца на менейшыя часткі, якія называюцца фрагментамі, і гэты выбор выявіўся аднам з найзначнейшых у всім працэсе апрацоўкі. Мадэлі эмбеддынгу маюць фіксаваныя вікна кантэксту, што не дазволяе ператвараць цэлы дакумент на адны вектор. Нават калі дакумент пасваіцца, адны эмбеддынг цэлага файла дае шырокую, нечыстую адпрацоўку, таму што калькі некалякуюцыхся тэм з’еднаюцца, і тады точнасць пошуку падыходзіць нізка.
Кожны дакумент дзеліцца на фіксаванага розмеру часткі, які перакрываюцься, што дазволяе кожнаму эмбедынгу практычваць да меньшага, адзёрнейшага фрагмента тэксту. Выбір розмеру — гэта баланс між кантэкстам і спецыфічнасцю. Маленькія часткі зазвычай даюць болей тачныя рэзультаты, таму што кожны эмбедынг фіксуе вузкіяй ідэя, хоць яны ствараюць большае колькасць вектароў і збільшуюцы час індэксавання і прыемкі. Вялікія часткі зберагаюць большы кантэкст і зменшуюць колькасць вектароў, але кожны эмбедынг охопляе шырэй спектар інфармацыі, што можа знізіць тачнасць. Сэмантычнае або рэчэнцэ-спрамаванае дзеленне на часткі існуе як болей сложны варыянт, пры тым чыстае дзеленне на фіксаванага розмеру падтвердзілася як просты і эфектыўны базовы падход для загальнага выкарыстоўвання.
chunks = [
text[i:i+500]
for i in range(0, len(text), 450)
]
/*
Fixed-size overlapping chunk generation used during document ingestion.
A chunk length of 500 characters and a stride of 450 characters preserve
contextual continuity while maintaining semantic specificity.
*/
Эмбеддынгі з Pinecone
Далей кантэкставы фрагменты ператвараюцца ў эмбеддынгі. Эмбеддынг — гэта ўжоўтучая чысловая рэпрэзентацыя тэксту, якая кодуе яго значэнне. У працы з сэмантычным пошукам узамен на падбіранне ключоўых слоў выкорыстоўваюцца вектары, таму супарадныя тэксты падбіраюцца нават праз разны слоўнік. Вектары слов "кот" і "собака" знаходзяцца падалёку адзін ад другога ў прасторэ эмбеддынга, тады як вектары "кот" і "летак" знаходзяцца далёка адзін ад другога, што дазволяе вылічыць схожасць матэматычна, а не праз точнае падбіранне слоў.
Модэль эмбеддынга тут — гэта хоставаны мультыязычны модэль Pinecone multilingual-e5-large, які доступны праз API Pinecone Inference. Хоставаныя службы означаюць, што не трэба розмішчаць чы выкарыстоўваць окрэмыя модэлі машыннага навчання, таму код для апрацоўкі дакументаў можа сфокусавацца на самай апрацоўцы, а архітэктура застаецца простэйшай.
Гэты модэль быў выбраны таму, што ён налаштаваны для семантычнага пошуку і падтрымляе больш чым сто мов. Сяродзядзе E5 таксама розглядае запіты і фрагменты дакументаў як разныя тыпы вхідных дадзеных, што чыніць яго адпаведным для эфектывнага пошуку. Пад час стварэння індэкса фрагменты дакументаў уключаюцца як самы контэнт, які можна шукаты. Пад час запуску запіту запыт корыстніка таксама уключаецца як сам стакант. Оба элементы опінаваюцца ў аднам семантычным прасторэ, што падвайшвае шансы знайсці правільны матэрыял, нават калі формулювання сутэчы значна разлічыцца.
Ёнколі ў спрытнасі, фрагменты надаюцца да API пакетамі по 96 екземпляраў — гэта максымальны размер пакета, які Pinecone Inference нараз чыні можлівым для мадэлі multilingual-e5-large. Надсылка большай колькасці фрагментаў за адну запытку зменшае колькасць вызоў API, лепшая выкарыстоўвае рэсурсы і скрацвае час стварэння індэкса, у пораўнанні з падчас стварэння індэкса фрагмент за фрагментам. Готавые эмбедынгі і ўсія іх метаданы пасля чаго зберагаюцца ў векторнай базе дадзеных Pinecone, гатовыя да выкарыстоўвання.
embeddings = pc.inference.embed(
model="multilingual-e5-large",
inputs=batch,
parameters={"input_type": "passage"}
)
Сервер MCP для семантычнага пошуку
Калі дакументы ўжо індэксаваны, агентам патрэбны способы для ўзаемадзеяння. У замест на тое, каб безпасэродзе адкрываць базу дадзеных вектараў для прыемлівачаў, сервер Model Context Protocol, створаны на базе FastMCP, выступае як прыемліваць. MCP дае прыемлівачам AI аднаго стандартнага спосабу для вызову інструментаў, таму будзь-які сумесны кліент можа выкарыстоўваць функцыю пошуку без пазнання базы дадзеных чы мадэлі імбеддынгу, якая яе падтрымляе. Дадатковы шар дазволяе коду пошуку быць перызнаўваным, застаўацца простым у адтрыманні і залішацца незалежным ад прыемлівачаў, якія яго выкарыстоўваюць.
Основная задача сервера — адбіранне дакументаў. Калі агент адправляе запіт, сервер імбеддуе яго за дапамогою той самой багатыязычнай мадэлі multilingual-e5-large, якая вжывалася пад час індэксавання, адрабатвае пошук на адпаведным індэксе Pinecone і вяртае найболей рэлевантныя фрагменты. Вжыцце адной і той самай мадэлі з обох бакоў дазволяе фрагментам і запытам застаўацца ў тым жа семантычным прасторэ, што і ўчыняе ўпораненне іх значымым.
Ёнколі трэба падняць якасць рэзультата, адказвальны інструмент вяртае толькі тыя рэзультаты, якія маюць косайнае сэрабяжнасць вышэй 0,82. У эксперыментах балы вышэй гэтага прага зазвычай абяцвалі ся сільным сэмантычным адпаведненнем между запыткай і фрагментам тэкста, тады калі балы былі ніжэй, адносіненне было ў лепшым случае слабым. Адсечэнне слабейшых рэзультатаў дае мовным мадэлям болей рэлевантны кантэкст. Запытка на кшталт «Як падаць звястку пра вітраты?» можа дасягнуць правага сторонніцы, нават якшо дакумент пісае гэта інакш. Па-за пошукам, сервер апускае інструменты для адтрымання вектарнай базы дадзеных: адкладанне вектараў, ўдаленне іх і перыяктуванне доступных індэксаў.
Паколькі сістэма прызначана для вікорыстання ў корпоратыўных умовах, абяранне безпекі ёсць часткай яе праектавання. Даныя аб прынтэнцыях праграмы походзяць з Azure Key Vault, і кожны запіт вымагае чынныя API-клучы пры выкананні будзь-якага запрашэння. Дакладныя відомасці інфраструктуры захішчаны ад доступу кліентскіх прыкладненняў, а доступ да індэксаваных дакументаў таксама захішчаны.
results = index.query(
vector=query_embedding,
top_k=5,
include_metadata=True
)
Што паказвае праект пра выкарыстоўванне RAG для внутрашніх дакументаў
Эфектывная семантычная сістэма пошуку залежыць не менш ад інжынерных рашэнняў, чым ад мовных модэляў, якія яе ствараюць. Стратэгія разбівання на часткі, модэль укладання дадзеных, падход да групавання і архітэктура адзысквання дакументаў безпасэродзе вплываюць на якасць, масштабаванніста і зручнасць адтрымання. Размешчэнне процэса прыемы дадзеных і адзысквання ў спадарожніку MCP дае модульную сістэму, якая можа быць перызнацца, проста ў адтрыманні і лёгка расшырваецца па меры змян у патрэбах.
Чырвоныя версіі являюцца моцным адказом з ясным просторам для развіцця. Семантычна разбіўка, пераранжаванне модэляў, гібрыдны пошук і багатыя метаданы могу далей паспрыяць павышэнню карэнтнасці пошуку, захаваючы пры этым модульную структуру. Калі генераванне з падтрымкай пошуку становіцца стандартам у корпаратыўнай ІІ, надзеяны семантычны пошук ператвараецца на базовы элемент працоўных сістэм, а спалучэнне Pinecone Inference з шаром пошуку MCP — гэта практычны, масштабавальны спосаб стварэння перадаўальнага семантычнага пошуку.