RAG протык MCP: RAG протык MCP: Полныя вядомасці для разработчыкаў у 2026 годзе
Практычныя вказыванні ўсуперак RAG і MCP: контракты, перагледы та месцы для вставкі коду для команд, якія розробляюць системы RAG без тыхнявых частковых абярэнняў.
Наступныя прытамлівкі паказваюць практычны падход да разумэння тэмы “RAG vs MCP: Паўны практычны кярэквяд для разработчыкаў у 2026 годзе”. Акцэнт ставіцца на контракты, перакананняя і месцы для коду, які можна проста заместіць, а не на мотывацыйныя аспекты.
Короткая сутнасць
Калі працуеце з короткая сутнасць, спачатку запішыце контракт: неабяжныя вхідныя даны, сігнал успеху і тое, што выканаецца у разы ўзельнага нявыпалення. Такі чарткі дапамагае заставіць пазнейшыя змены коду адпаведнымі. Запісвайце час выканення і кост токенаў або запытаў праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўысы. Перад налаштаванням запрошэнняў пераканайцеся, як система адпаведзя на фіксованы набор запытаў. Частае змены запрошэнняў рэдка калі-небудзь выправляюць слабую спроможнасць системы да пошуку інформацыі.
Частка 1: Чаму ўсё-такі існуе RAG
Калі працюеце над Часткаю 1: Што такое RAG, спачатку запісайце умовы викорыстоўвання: неабходныя даны, сігнал успеху і што выканаецца у разе частковага невыпання. Такі список дапамагае залічваць змяны ў кодзе праз адныя.
Аналагія, якая дапамагае зрозумець
Калі працюеце над кнігай «The analogy that makes it click», спачатку запісацеце кантракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага неудачы. Такі список пераканаець застаўляцца чыстасцю пазнейшых змян у кодзе. Дакументаваце ці пат адпрацоўкі і пат вярнення ў нормальны стан аднойчы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткаю продукту, а не пазнейшым дапрацоўкам. Змяроўваце рэтард на фіксаванай сэтке запытаў прычым падбір запытаў. Частае змена запытаў рэдка калі вярнее слабую систему аднаходжэння інформацыі.
Чаму для цього патрэбна вектарная база дадзеных
Калі працюеце над пытаннем «Чаму патрэбна база данных вектароў», спачатку запісайце шэраг: неабходныя даны, сігнал успеху і тое, што выходзіць у разе частковага абякання. Такі список дапамагае заліцварыць будучыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок абякае, абяканне павінна вказваць на адну адпаведальнасць, а не на заплутаны ланцужок задач. Перад налаштаваннем запитоў пераканайцеся ў рэкалі на фіксаваным наборе запитанняў. Частае змена запитоў рэдка калі-небудзь выправляе слабкую эфектыўнасць пошуку.
RAG у кодзе
Калі працуеце з RAG у кодзе, спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрэчвайце гэты этап як контракт межа даннімі і перакананымі выходамі. Дайце назву артыфактам, задаць правіла пераканання успеху і не падзеўляйцеся частковым завершэнням без паведамлення. Змяроўваце рэкалі на фіксаванай сэтке запытаў прычым регулювання прамптав. Частае змена прамптав рэдка калі вярнуе слабую систему пошуку. Калі працуеце з RAG у кодзе, спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Храніце настройкі за межамі коду аплікацыі. Файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
from openai import OpenAI
client = OpenAI()
# Your knowledge base, already chunked.
DOCUMENTS = [
"The P/E ratio divides share price by earnings per share. "
"When earnings are negative, P/E is undefined and usually shown as N/A.",
"EV/EBITDA is often preferred over P/E for capital-intensive companies "
"because it is unaffected by capital structure and depreciation policy.",
"The PEG ratio adjusts P/E by the expected earnings growth rate. "
"A PEG below 1.0 is traditionally read as undervalued.",
]
def embed(text: str) -> list[float]:
"""Turn text into a vector."""
response = client.embeddings.create(
model="text-embedding-3-small",
input=text,
)
return response.data[0].embedding
def cosine_similarity(a: list[float], b: list[float]) -> float:
"""How close are two vectors? 1.0 means identical direction."""
dot = sum(x * y for x, y in zip(a, b))
norm_a = sum(x * x for x in a) ** 0.5
norm_b = sum(y * y for y in b) ** 0.5
return dot / (norm_a * norm_b)
# Index once, reuse many times. In production this lives in a vector DB.
INDEX = [(doc, embed(doc)) for doc in DOCUMENTS]
def retrieve(question: str, k: int = 2) -> list[str]:
"""Step 1: find the most relevant chunks."""
q_vector = embed(question)
scored = [
(cosine_similarity(q_vector, vector), doc)
for doc, vector in INDEX
]
scored.sort(reverse=True)
return [doc for _, doc in scored[:k]]
def answer(question: str) -> str:
"""Steps 2 and 3: augment the prompt, then generate."""
context = "\n\n".join(retrieve(question))
prompt = (
f"Answer using only the context below.\n\n"
f"Context:\n{context}\n\n"
f"Question: {question}"
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
)
return response.choices[0].message.content
print(answer("What do I use when a company has negative earnings?"))
Частка 2: Чаму ўсё-такі ёсць MCP
Частка 2: Канцэпцыя MCP работае наўзяй калі яе спрыята як мерыемую паверхню. Зафіксавайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не наступным этапам дорабачання. Раздзеліце політыку часткавай обработкі ад політыки выкарыстоўвання дадзеных. Змена адной з іх не должна прымусіваць перапісванне другой, калі зменяюцыся паказнікі якосці.
Аналагія
Аналагія працюе найкраща, калі яе розглядаць як вимерную паверхню. Зафіксавайце адзін «золаты» прыемлівы варыянт, адзін кейс неудачы і прыметкі па поверненню да пачатковага стану пры расшырэнні масштаба. Валіце варот на маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Раздзеляйце правілы часткавання інфармацыі ад правіл яе выявлення. Змена ў одных не павінна прымусваць перапісванне другых, калі зменяюцца паказнікі якосці.
Тры элементы, якія адкрываюць серверы MCP
Тры ўрадкі, якія аддаюць серверы MCP, працуюць наўсёбліжэй, калі іх спрыяваць як мерыемую паверхню. Зберагуйце адны ідеальны прыклад роботы, адны прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Спрыяйце гэтам этапу як кантракту межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаць критэрыя успеху і адмовіцеся ад мовчанкавага частковага завершэння. Раздзеліце політыку часткавага оброблэння дадзеных ад політыкі ўтрымання іх. Змена адной з яных не павінна вымагаць перапісвання другой, калі зменяюцыся паказнікі якосці. Тры ўрадкі, якія аддаюць серверы MCP, працуюць наўсёбліжэй, калі іх спрыяваць як мерыемую паверхню. Зберагуйце адны ідеальны прыклад роботы, адны прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Зберагаюце настройкі праза код аплікацыі. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое аператары можаць пераглядаць без неабяжнага чытання всіх элементаў.
MCP у коде
Для MCP у коде неабяжна прадзецьваць вхідныя даны, адпаведнага адпаведальнага за крок і крэтыяры выходу пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Указваць трэба тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не зможаць разлічыць галюцинацію ад працягу індэксавання.
from mcp.server.fastmcp import FastMCP
import httpx
mcp = FastMCP("finance-tools")
@mcp.tool()
def get_current_price(ticker: str) -> dict:
"""Get the latest price for a stock ticker.
The docstring matters more than you'd think. It is what the
model reads to decide whether to call this tool at all.
"""
response = httpx.get(f"https://api.example.com/quote/{ticker}")
return response.json()
@mcp.tool()
def compare_tickers(ticker_a: str, ticker_b: str) -> dict:
"""Compare two tickers on price, market cap and P/E ratio."""
return {
"a": get_current_price(ticker_a),
"b": get_current_price(ticker_b),
}
if __name__ == "__main__":
mcp.run()
claude mcp add finance -- python /path/to/server.py
Частка 3: Асеновыя разлікі
Для часткі: Фактычная разліка, неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння перад змінайом коду. Аперацыяныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Валідзіце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адзіну адпаведальнасць, а не на заплутаны процес. Указывайце тыя часткі, якія фактычна ляглі в основу адпаведнай адказы. Без цых цітатаў аперацыяныя працавнікі не зможуць адразліць галюцинацыю ад працявання з непаштоўнымі даннымі.
Правіла ў адной фразе
Для правілу ў адной фразе неабходна прадзефінавацыя вхідных дадзеных, адпаведнага адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае перайсці на выкананне кроку з вядомага пункту контролю, не спрабоўваючы здагадвацца пра захаваны стан. Спрэчвайце гэты этап як кантракт межа вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, прадзефінавацыя крэтароў успеху і адмовіцеся ад бяспрэчнага частковага завершэння. Цітуйце тыя часткі, якія фактычна сталі падставай для адпаведнай адпаведзі. Без цітаў аперацыйныя працавнікі не зможуць адразніць галюцинацыю ад працявання з індэксамі. Для правілу ў адной фразе неабходна прадзефінавацыя вхідных дадзеных, адпаведнага адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае перайсці на выкананне кроку з вядомага пункту контролю, не спрабоўваючы здагадвацца пра захаваны стан. Зберагачыце настройкі параду коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое працавнікі можуць аудытаваць, не чытаючы весь граф.
Чаму паўтараюцца запытанні «Ці RAG і MCP адносны?»
Калі працуеце над запытаннем «Чаму паўтараюцца запытанні „Ці RAG і MCP адносны?“», спачатку запішыце умовы працы: неабходныя данні, сигнал успеху і тое, што выканаецца у разы частковага невялікога браку. Такі чарт дапамагае заліцвачыць пазнейшыя змены ў кодзе. Адразу задокументавайце шляхы правернення роботы і вярнення ў нормальны стан. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не пазнейшым дапрацоўкам. Перад налаштаваннем заповедзей пераканайцеся ў рэкале на фіксаваным наборы запытанняў. Частае змена заповедзей рэдка калі вялікі праблемы з выкарыстоўванням дадзеных.
Частка 4: Адны і той самы асістэнт, створаны два разы
Працюючы над часткай 4: «Той самы асистэнт, створаны два разы», спачатку запісайце кантракт – неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі список пераканае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, неудача должна паказваць на адну адпаведальнасць, а не на заплутаны ланцюг задач. Перад налаштаваннем запитоў пераканайце рэкалі на фіксаваным наборы пытанняў. Частае змена запитоў рэдка калі-небудзь вылечвае слабую систему аднаходжэння інформацыі.
Версія А: падход RAG
Калі працуеце з Версіяй А: падходам RAG, спачатку запісайце контракт: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрэчвайце гэты этап як контракт межа даннімі і перакананымі выходамі. Дайце назвы артыфактам, задаце критэрыя успеху і не прымайце часткова завершанне без паведамлення. Змяроўваце рэкалі на фіксаванай сэтке запытаў прычым регулюванні прапаза. Частае змены прапаза рэдка калі выправляюць слабую систему пошуку. Калі працуеце з Версіяй А: падходам RAG, спачатку запісайце контракт: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагаеце настройкі за межамі коду прыемлі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
# Building a knowledge base of financial concepts
CORPUS = [
"Market capitalization equals share price multiplied by shares outstanding.",
"The P/E ratio compares share price to earnings per share.",
"Free cash flow is operating cash flow minus capital expenditures.",
"A dividend yield above 6% often signals either a falling share price "
"or an unsustainable payout ratio.",
# ...plus a few thousand more chunks
]
# Index them, then:
answer("Explain what a high dividend yield might indicate")
answer("What is Apple's current dividend yield?")
Версія B: падчынны MCP
Версія B: падчынны MCP працюе найкраща, калі яго расследжваюць як вимерную паверхню. Зберагчыце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Дакументавайце як успішны, так і вярнучыся шляхы адночасна. Перапрыбуткі, людзкія контраліны і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляэтапным дорабкам. Раздзеляйце правілы частковай обработкі і правілы выкарыстоўвання дадзеных. Змена аднаго з іх не должна прымусіць перапісваўце іншага, калі змянююцыся паказатэлі якосці.
# EODHD publishes two endpoints. v2 uses OAuth, v1 uses an API key.
claude mcp add --transport http eodhd https://mcp.eodhd.com/v2/mcp
Версія C: і тое, і другое, што на самай працоўкі вы адправляеце
Версія C: абы тое, абы інше — тое, што насправды вы выкладзеце, працюе найкраща, калі яго расследжваць як вимерную плошчу. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку па адвярненню перад расшырэнням масштаба. Волійце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Раздзеляйце правілы часткавання і правілы выкарыстоўвання дадзеных. Змена адных не павінна прымусваць перапісвання іншых, калі змянююцца паказнікі якосці.
def route(question: str) -> str:
"""Decide which subsystem answers this question."""
# Signals that the question is about live state
live_signals = ["current", "today", "now", "latest", "price", "quote"]
if any(signal in question.lower() for signal in live_signals):
return "mcp" # fetch it
return "rag" # look it up
Частка 5: Спадзяючыся порэвананні, якія люди плутаюць
Частка 5: Спадзеяныя порэвананні, якія люди плутаюць, найэфектывней працуюць, калі іх расследжваюць як вимерную паверхню. Зафіксавайце адны ідеальны прымер, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Расследжвайце гэты этап як кантракт межа вхіднымі даннымі та перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць критэрыя успеху та адмовіцеся ад мовчанкавага частковага завершэння. Раздзеліце політіку частковай обробкі данных ад політіки ўзяць іх. Змена аднай з яных не павінна прымусваць перапісванне другой, калі зменяюцыся паказнікі якосці.
MCP проты API
Для MCP протыра API неабяжна прадзефінаваць вхідныя даны, абоўтака крока і крэтыры завершэння перад змянай коду. Аперацыёныя працавнікі павінны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Паказваць часткі тексту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аперацыёныя працавнікі не зможуць адразніць галюцинацыю ад прасоўкі ў індэксаванні.
MCP протыра агента
Для суперангу MCP проты агента неабяжна прадзефінаваць вхідныя даны, абяронца крока і крытэрыі завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына неудачы павінна вказываць на адну абяраносць, а не на заплутаны ланцоўкі. Наводзіце тыя часткі, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аперацыйныя працавнікі не зможуць адразніць галюцинацыю ад працягу індэксавання.
RAG проты файн-тюнінгу
Для парадыгмы RAG протыя fine-tuning, перад зменайчом коду неабходна ясная дэфініцыя вхідных дадзенняў, адпаведальнага за выкананне крока і крэтарыяў завершэння. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце таму, каб гэты этап быў схожы на контракт межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць крэтарыі успеху і не падтрымайце безсловеснае частковае завершэння задання. Указуйце тыя часткі тексту, якія фактычна ляглі ва основу адпаведнай адказы. Без ціх цитатаў аператары не зможаць розлічыць галюцинацію ад працягу індэксавання. Для парадыгмы RAG протыя fine-tuning, перад зменайчом коду неабходна ясная дэфініцыя вхідных дадзенняў, адпаведальнага за выкананне крока і крэтарыяў завершэння. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Храніце настройкі праза код аплікацыі. Файлы серавэра, хранільнікі секретных дадзенняў і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь код аплікацыі.
Частка 6: Выбір вашага стэка
Калі працюеце над Часткай 6: Выбір вашага стэка, спачатку запісайце умовы викорыстання: неабяжлівыя данні, сигнал успеху і тое, што відбываецца у разе частковага невыпання. Такі список дапамагае заліцварыць пазнейшыя змены коду. Документавайце як шлях успеху, так і шлях відновлення. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не елементамі пазнейшай доработкі. Перад налаштаванням запитоў пераканайцеся, што система правільна адпаведзяў на фіксованы набор запитаў. Частая зміна запитоў рэдка калі выправляе слабкую спроможнасць системы да пошуку інформаціі.
Частае запытання
Калі працуеце з частымі запитаннямі, спачатку запісайце умовы контракту: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, невыпанне должна паказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Перад налаштаваннем запитоў пераканайцеся ў рэкале на фіксаваным наборы запитанняў. Частае змена запитоў рэдка калі-небудзь выправляе слабкую систему пошуку.
Чэрніцкі ліст для эксплуатацыі
Для чэрніцкага ліста для эксплуатацыі перад зменай коду задазвольце даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавнікі должны магчымае перазапускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан.
Запісвайце час выконання і кост токеноў або запытаў разам з функцыйнаімі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмавай версіі ў спяльныя сераўы.
Указайце тыя часткі тексту, які фактычна сталі падставай для адпаведнай адказы. Без ціх цитатаў аператары не можуць разлічыць галюцинацыю ад прасоў у індэксаванні.
Запішыце назву інструмента, хэш параметраў, час адпаведзьбы і рэзультат кожнага вызову. Дыбаггін ціклама агента без такога следу змарнуюе гады.
Закрепіце версіі залежнасцяў і запішыце дзейнік зображэння, якое было выкарыстоўвана для дэманстрацыі. Возможнасць павтарэння перадуеяе традыцыйным знаёмствам.
Вядзьміце прыоритет над малымі, тэставанымі елементамі працоўнікаў над вялікімі скрыптамі. Калі які-небудзь крок не выйшае, адказ за гэтае некальканоснае становішча павінен быць адносным да адзінаго элемента, а не да заплутанай лініі обработкі.
Перад тым, як апранаваць новую структуру, заморозіце версіі, зафіксавыце «золаты» транскрыпт для критычнай лініі і паказваце крокі для адвярнення змян. У спакульнаваных средах патрэбны ліміты частоты вызоваў, пераказы наявнасці ресурсаў і чысткі власніка для змены секрэтных даных. Вядзьміце прыоритет над пераканлівымі, адзінразовымі дэманстрацыямі над простаю надзеяй на надзейнасць.
Запіскі для пакета 03e5c3844f8b: не класты ключі прадаўцоў у репазітарыю, задаць максымальны ліміт токена на сесію, а таксама зберагчы транскрыпціі праза фіксатуры адлічэння, каб пазнейшыя замены моделей заставаліся порównанымі.