Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Important
SQL Modeli Bağlam Protokolü (MCP) Sunucusu, Veri API oluşturucusu sürüm 1.7'de kullanılabilir. En son özellikler ve hata düzeltmeleri için 2.0 önizleme sürümünü kullanın.
SQL Model Bağlam Protokolü (MCP) Sunucusu yalnızca bulutta barındırılan yapay zeka hizmetleriyle değil, tüm MCP uyumlu istemcilerle çalışır. Ortamınız sağlık, savunma, finans, enerji ve denizcilik sektörlerinde ortak olan bulut büyük dil modeli (LLM) erişimini kısıtlarsa Ollama veya benzer araçlar aracılığıyla sunulan yerel bir modeli bağlayabilirsiniz. Bu kılavuz küçük yerel modelleri güvenilir hale getiren kurulum, alan meta veri yapılandırması ve istem desenlerini kapsar.
Prerequisites
- Veri API oluşturucuSU CLI'sı en az bir varlıkla yüklenmiş ve yapılandırılmıştır. CLI'yi yükleyin.
- Araç çağrısını destekleyen bir modele sahip Ollama (örneğin,
qwen3:8b,llama3.1:8b). -
ve
mcppaketleriyleollama. - Veri içeren çalışan SQL Server örneği.
1. Adım: Alan meta verilerini yapılandırma
Alan meta verileri, yerel model doğruluğu için en önemli yapılandırma adımıdır. Alan adları ve açıklamalar olmadan aracılar yalnızca varlık adlarını görür ve sütun adlarını yanlış tahmin eder.
Uyarı
Bu adımın atlanması teknik olarak çalışan ancak araç yanıtlarını okuyan herhangi bir model tarafından işlevsel olarak kullanılamayan bir MCP sunucusu oluşturur. Modelde sütunlarınız hakkında bilgi yoktur.
Varlığınızı bir açıklamayla ekleyin ve ardından kısıtlanmış sütunlar için geçerli değerler içeren alan açıklamaları ekleyin:
dab add ServerInventory \
--source dbo.ServerInventory \
--permissions "anonymous:read" \
--description "SQL Server instance inventory with version, environment, and sizing data"
dab update ServerInventory \
--fields.name InstanceName --fields.primary-key true \
--fields.description "SQL Server instance name (e.g., YOURSERVER01)"
dab update ServerInventory \
--fields.name Environment \
--fields.description "Deployment environment. Valid values: Prod, Dev, Test, UAT"
Tam CLI başvurusu ve kısıtlanmış değerler, parametre açıklamaları ve betik desenleri gibi en iyi yöntemler için bkz. Varlıklara açıklama ekleme.
Note
dab update CLI, virgülleri bağımsız değişken ayırıcıları olarak ele alır. Açıklamanız virgül içeriyorsa, bunun yerine doğrudan düzenleyin dab-config.json .
2. Adım: SQL MCP Server'ı başlatma
dab start
SQL MCP Server, varsayılan olarak akış destekleyen HTTP taşıması üzerinden http://localhost:5000/mcp üzerinde dinler. MCP protokolunu uygulayan tüm istemciler bu uç noktaya bağlanabilir.
3. Adım: Yerel modelinizi bağlama
Ollama modelinizi SQL MCP Server'a bağlayan bir MCP istemcisi oluşturun. Aşağıdaki Python örnekte MCP Python SDK ve ollama paketi kullanılmaktadır.
Bağımlılıkları yükleme
pip install mcp ollama
Minimal Python test düzeneği
import asyncio
import json
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client
import ollama
MCP_URL = "http://localhost:5000/mcp"
MODEL = "qwen3:8b"
async def get_schema(session: ClientSession) -> str:
"""Call describe_entities and format results for the system prompt."""
result = await session.call_tool("describe_entities", arguments={})
entities = json.loads(result.content[0].text)
lines = []
for entity in entities.get("entities", []):
fields = ", ".join(
f"{f['name']} ({f.get('description', 'no description')})"
for f in entity.get("fields", [])
)
lines.append(f"- {entity['name']}: {entity.get('description', '')}")
if fields:
lines.append(f" Fields: {fields}")
return "\n".join(lines)
async def run(user_question: str):
async with streamable_http_client(MCP_URL) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# Preinject schema into the system prompt
schema_text = await get_schema(session)
system_prompt = f"""You query a SQL database through MCP tools.
Available entities:
{schema_text}
Rules:
- Use the exact field names shown above.
- Answer count questions with the count only.
- Do not produce summaries unless asked.
- Do not invent example data. Only return data from tool responses.
- If no results, say "No results found" and stop.
"""
# Get available tools for Ollama
tools_result = await session.list_tools()
ollama_tools = [
{
"type": "function",
"function": {
"name": t.name,
"description": t.description or "",
"parameters": t.inputSchema,
},
}
for t in tools_result.tools
]
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_question},
]
# Chat loop: let the model call tools until it produces a final answer
while True:
response = ollama.chat(
model=MODEL, messages=messages, tools=ollama_tools
)
msg = response["message"]
messages.append(msg)
if not msg.get("tool_calls"):
print(msg["content"])
break
for tc in msg["tool_calls"]:
result = await session.call_tool(
tc["function"]["name"],
arguments=tc["function"]["arguments"],
)
messages.append(
{
"role": "tool",
"content": result.content[0].text,
}
)
asyncio.run(run("How many SQL 2019 servers are in production?"))
Bu düzenek tüm döngüyü yönetir: şemanın önceden enjekte edilmesi, araç keşfi, çok turlu araç çağrısı ve nihai yanıtın çıkarılması.
MODEL ve MCP_URL öğelerini ortamınıza göre ayarlayın.
Başlangıçta şemayı önceden enjekte etme
Küçük yerel modeller (14B parametrelerin altında), konuşma başlamadan önce sistem isteminde şema meta verileri olduğunda daha güvenilir araç çağrıları oluşturur. Konuşma sırasında describe_entities öğesini kendi başına çağırması için modele güvenmek yerine, test düzeneği başlatılırken describe_entities öğesini çağırın ve sonucu enjekte edin.
Ön değerlendirme neden önemlidir?
| Yaklaşım | Küçük modellerle davranış |
|---|---|
| Dinamik keşif | Modelin önce arama describe_entities yapmaya, ardından sonuçları yorumlamaya ve ardından doğru alan adlarıyla doğru aracı çağırmaya karar vermesi gerekir. Birden çok hata noktası. |
| Ön enjeksiyon | Model varlık adlarını, alan adlarını ve açıklamaları hemen görür. İlk denemede araç çağrılarını doğru yapın. |
Önceki bölümdeki test düzeneği örneği, bu kalıbı göstermektedir. İşlev başlangıçta get_schema() bir kez çağırır describe_entities ve sonucu sistem istemine biçimlendirer.
Tip
Daha büyük bulut modelleri (GPT-4o, Claude) genellikle konuşma sırasında ön değerlendirme olmadan şemayı bulur. Bu desen en çok 14B parametrelerin altındaki modeller için değerlidir.
Model yanıtlarını kısıtlama
Model doğru bir araç çağrısı yapabilir, doğru verileri alabilir ve yine de yanlış bir yanıt oluşturabilir. Örneğin, kendisine "kaç üretim sunucusu var?" diye sorulan bir model, 16 satırı doğru şekilde getirebilir; ardından da yalnızca 16 sayısı yerine, uydurma örnekler içeren 40 satırlık, üst yönetime yönelik bir özetle yanıt verebilir.
Sistem isteminize açık negatif kurallar ekleyin:
Rules:
- Answer count questions with the count only.
- Do not produce summaries unless the user asks for one.
- Do not invent example data. Only return data from tool responses.
- If a tool returns no results, say "No results found" and stop.
Araç çağırma doğruluğu ile yanıt disiplini farklı sorunlardır. DAB, araç katmanı aracılığıyla doğru veri alımı sağlar. Komut istemi düzeneğiniz, modelin sonuçları nasıl sunduğunu kontrol eder.
Considerations
| Başlık | Ayrıntılar |
|---|---|
| Donanım | Araç çağırma özelliği, orta seviye donanımlarda çalışır. Tüketici Nvidia GPU'da (8 GB video RAM) 8B parametreli bir model yararlı sonuçlar üretir. Toplu iş yüklerine uyan, soru başına on saniyelik gecikme süresi bekleyin. |
| Batch ile etkileşimli karşılaştırma | Küçük modeller, gecikme dayanıklılığının daha yüksek olduğu toplu işleme (performans raporları, envanter sorguları) için uygundur. |
| Araç kullanılabilirliği |
aggregate_records yalnızca sürüm 2.0 önizleme ve sonraki sürümlerde kullanılabilir. Sürüm 1.7.x'te, sayı ve toplama sorguları modeli eşleşen tüm satırları okumaya zorlar.
Sürüme göre araçların kullanılabilirliğine bakın. |
| Taşıma | Yerel modeller, /mcp'ye akış destekleyen HTTP üzerinden bağlanır.
Standart giriş/çıkış (stdio) aktarımı, tek işlemli kurulumlar için bir alternatiftir. |
| Kimlik Doğrulaması | Yerel geliştirme için izinleri kullanın anonymous . Üretim için ortamınıza uygun kimlik doğrulamasını yapılandırın. |