Conectar uma base de dados de conhecimento do Foundry IQ ao Serviço do Foundry Agent

Importante

Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.

Neste artigo, você aprenderá a conectar uma base de conhecimento do Foundry IQ a um agente no Foundry Agent Service. A conexão usa o PROTOCOLO MCP (Model Context Protocol) para facilitar chamadas de ferramenta. Quando invocada pelo agente, a base de dados de conhecimento orquestra as seguintes operações:

  • Planeja e decompõe uma consulta de usuário em subconsultas.
  • Processa as subconsultas simultaneamente usando técnicas de palavra-chave, vetor ou híbrida.
  • Aplica o reclassificado semântico para identificar os resultados mais relevantes.
  • Sintetiza os resultados em uma resposta unificada com referências de origem.

O agente usa a resposta para fundamentar suas respostas em dados corporativos ou fontes da Web, garantindo precisão factual e transparência por meio da atribuição de origem.

Para obter um exemplo de ponta a ponta da integração do Pesquisa de IA do Azure  e do Foundry Agent Service para recuperação de conhecimento, consulte o exemplo agentic-retrieval-pipeline-example Python em GitHub.

Suporte ao uso

Suporte ao Microsoft Foundry SDK do Python C# SDK JavaScript SDK SDK do Java API REST Configuração básica do agente Configuração do agente padrão
✔️ ✔️ - - - ✔️ ✔️ ✔️

Pré-requisitos

Autenticação e permissões

Recomendamos o controle de acesso baseado em função para implantações de produção. Se as funções não forem viáveis, ignore esta seção e use a autenticação baseada em chave.

  • No recurso pai do seu projeto, você precisa da função Usuário do Azure AI para acessar implantações de modelo e criar agentes. Os proprietários obtêm automaticamente essa função quando criam o recurso. Outros usuários precisam de uma atribuição de função específica. Para obter mais informações, consulte o controle de acesso baseado em função no portal do Foundry.

  • No recurso pai do seu projeto, você precisa da função Azure AI Gerente de Projetos para criar uma conexão de projeto para autenticação MCP, e de Azure AI Usuário ou Azure AI Gerente de Projetos para utilizar a ferramenta MCP em agentes.

  • Em seu projeto, crie uma identidade gerenciada atribuída pelo sistema para interações com Pesquisa de IA do Azure .

Valores necessários

Use os valores a seguir nos exemplos de código.

Valor Onde obtê-lo Exemplo
Project endpoint (project_endpoint) Encontre-o nos detalhes do projeto no portal do Microsoft Foundry. https://your-resource.services.ai.azure.com/api/projects/your-project
ID de recurso do projeto (project_resource_id) Copie a ID do recurso ARM do projeto do portal Azure ou use CLI do Azure para consultar a ID do recurso. /subscriptions/.../resourceGroups/.../providers/Microsoft.MachineLearningServices/workspaces/.../projects/...
Pesquisa de IA do Azure  endpoint (search_service_endpoint) Localize-o no serviço Pesquisa de IA do Azure  na página de visão geral Overview (a URL do serviço) no Portal do Azure. https://your-search-service.search.windows.net
Nome da base de dados de conhecimento (knowledge_base_name) Use o nome da base de dados de conhecimento que você criou em Pesquisa de IA do Azure . hr-policy-kb
Nome da conexão do projeto (project_connection_name) Escolha um nome para a conexão de projeto criada. my-kb-mcp-connection
Nome do agente (agent_name) Escolha um nome para a versão do agente que você criar. hr-assistant
Nome da implantação do modelo (deployed_LLM) Localize-o em suas implantações de modelo de projeto do Microsoft Foundry. gpt-4.1-mini

Dica

Recomendamos que você armazene o ponto de extremidade do projeto, o ponto de extremidade de pesquisa e o nome da base de dados de conhecimento em um .env arquivo para desenvolvimento local.

Criar uma conexão de projeto

Crie uma conexão RemoteTool em seu projeto Microsoft Foundry. Essa conexão usa a identidade gerenciada do projeto para direcionar o ponto de extremidade MCP da base de dados de conhecimento, permitindo que o agente se comunique com segurança com Pesquisa de IA do Azure  para operações de recuperação.

Nota

A categoria RemoteTool e o tipo de autenticação ProjectManagedIdentity são específicos para conexões de projeto do Microsoft Foundry.

import requests
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

# Provide connection details
credential = DefaultAzureCredential()
project_resource_id = "{project_resource_id}" # e.g. /subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{account_name}/projects/{project_name}
project_connection_name = "{project_connection_name}"
mcp_endpoint = "{search_service_endpoint}/knowledgebases/{knowledge_base_name}/mcp?api-version=2025-11-01-preview" # This endpoint enables the MCP connection between the agent and knowledge base

# Get bearer token for authentication
bearer_token_provider = get_bearer_token_provider(credential, "https://management.azure.com/.default")
headers = {
  "Authorization": f"Bearer {bearer_token_provider()}",
}

# Create project connection
response = requests.put(
  f"https://management.azure.com{project_resource_id}/connections/{project_connection_name}?api-version=2025-10-01-preview",
  headers = headers,
  json = {
    "name": project_connection_name,
    "type": "Microsoft.MachineLearningServices/workspaces/connections",
    "properties": {
      "authType": "ProjectManagedIdentity",
      "category": "RemoteTool",
      "target": mcp_endpoint,
      "isSharedToAll": True,
      "audience": "https://search.azure.com/",
      "metadata": { "ApiType": "Azure" }
    }
  }
)

response.raise_for_status()
print(f"Connection '{project_connection_name}' created or updated successfully.")

Otimizar instruções do agente para recuperação de conhecimento

Para melhorar as invocações da base de dados de conhecimento e produzir respostas com base em citação, comece com instruções como as seguintes:

You are a helpful assistant.

Use the knowledge base tool to answer user questions.
If the knowledge base doesn't contain the answer, respond with "I don't know".

When you use information from the knowledge base, include citations to the retrieved sources.

Este modelo de instrução otimiza para:

  • Taxas de invocação de ferramentas MCP mais altas: as diretivas explícitas garantem que o agente chame consistentemente a ferramenta de base de dados de conhecimento em vez de depender de seus dados de treinamento.
  • Atribuição de origem clara: as citações facilitam a validação de onde as informações vieram.

Dica

Embora este modelo forneça uma base forte, avalie e itera nas instruções com base em seus objetivos e casos de uso específicos. Teste diferentes variações para encontrar o que funciona melhor para seu cenário.

Criar um agente com a ferramenta MCP

Crie um agente que integre a base de dados de conhecimento como uma ferramenta MCP. O agente usa um prompt do sistema para instruir quando e como chamar a base de conhecimento. Ele segue instruções sobre como responder perguntas e mantém automaticamente sua configuração de ferramenta e configurações entre sessões de conversa.

Adicione a ferramenta MCP da base de conhecimento à conexão de projeto que você criou anteriormente. Essa ferramenta orquestra o planejamento de consultas, a decomposição e a recuperação entre fontes de conhecimento configuradas. O agente usa essa ferramenta para responder a consultas.

Nota

Pesquisa de IA do Azure  bases de dados de conhecimento expõem a ferramenta MCP knowledge_base_retrieve para integração de agente. Essa é a única ferramenta atualmente com suporte para uso com o Serviço do Foundry Agent.

from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, MCPTool
from azure.identity import DefaultAzureCredential

# Provide agent configuration details
credential = DefaultAzureCredential()
mcp_endpoint = "{search_service_endpoint}/knowledgebases/{knowledge_base_name}/mcp?api-version=2025-11-01-preview"
project_endpoint = "{project_endpoint}" # e.g. https://your-foundry-resource.services.ai.azure.com/api/projects/your-foundry-project
project_connection_name = "{project_connection_name}"
agent_name = "{agent_name}"
agent_model = "{deployed_LLM}" # e.g. gpt-4.1-mini

# Create project client
project_client = AIProjectClient(endpoint = project_endpoint, credential = credential)

# Define agent instructions (see "Optimize agent instructions" section for guidance)
instructions = """
You are a helpful assistant that must use the knowledge base to answer all the questions from user. You must never answer from your own knowledge under any circumstances.
Every answer must always provide annotations for using the MCP knowledge base tool and render them as: `【message_idx:search_idx†source_name】`
If you cannot find the answer in the provided knowledge base you must respond with "I don't know".
"""

# Create MCP tool with knowledge base connection
mcp_kb_tool = MCPTool(
    server_label = "knowledge-base",
    server_url = mcp_endpoint,
    require_approval = "never",
    allowed_tools = ["knowledge_base_retrieve"],
    project_connection_id = project_connection_name
)

# Create agent with MCP tool
agent = project_client.agents.create_version(
    agent_name = agent_name,
    definition = PromptAgentDefinition(
        model = agent_model,
        instructions = instructions,
        tools = [mcp_kb_tool]
    )
)

print(f"Agent '{agent_name}' created or updated successfully.")

Conectar-se a uma fonte de conhecimento de SharePoint remota

Importante

Nesta versão prévia, o Serviço do Foundry Agent não dá suporte a cabeçalhos por solicitação para ferramentas MCP. Os cabeçalhos definidos nas definições do agente se aplicam a todas as invocações e não podem variar de acordo com o usuário ou a solicitação.

Para autorização por usuário, use a Azure OpenAI Responses API em vez disso.

Opcionalmente, se sua base de dados de conhecimento incluir uma fonte de conhecimento SharePoint remota, você também deverá incluir o cabeçalho x-ms-query-source-authorization na conexão da ferramenta MCP. Para obter mais informações, consulte Impor permissões no momento da consulta.

from azure.identity import get_bearer_token_provider

# Create MCP tool with SharePoint authorization header
mcp_kb_tool = MCPTool(
    server_label = "knowledge-base",
    server_url = mcp_endpoint,
    require_approval = "never",
    allowed_tools = ["knowledge_base_retrieve"],
    project_connection_id = project_connection_name,
    headers = {
        "x-ms-query-source-authorization": get_bearer_token_provider(credential, "https://search.azure.com/.default")()
    }
)

Invocar o agente com uma consulta

Crie uma sessão de conversa e envie uma consulta de usuário para o agente. Quando apropriado, o agente orquestra chamadas para a ferramenta MCP para recuperar conteúdo relevante da base de dados de conhecimento. Em seguida, o agente sintetiza esse conteúdo em uma resposta de linguagem natural que cita os documentos de origem.

As URLs de citação nas respostas do agente variam de acordo com a fonte de conhecimento. Por exemplo, as fontes de conhecimento de blob retornam a URL do documento original, enquanto as fontes de conhecimento do índice de pesquisa recorrem ao endpoint MCP da sua base de conhecimento.

# Get the OpenAI client for responses and conversations
openai_client = project_client.get_openai_client()

# Create conversation
conversation = openai_client.conversations.create()

# Send request to trigger the MCP tool
response = openai_client.responses.create(
    conversation = conversation.id,
    input = """
        Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown?
        Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?
    """,
    extra_body = {"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

print(f"Response: {response.output_text}")

A saída deve ser semelhante à seguinte (truncada para fins de brevidade):

Response: Suburban belts display larger December brightening than urban cores, even 
though absolute light levels are higher downtown, primarily because holiday lights 
increase most dramatically in the suburbs and outskirts of major cities. This is due 
to more yard space and a prevalence of single-family homes in suburban areas...

The Phoenix nighttime street grid is sharply visible from space due to the city's 
layout along a regular grid of city blocks and streets with extensive street lighting...

References:
- earth_at_night_508_page_174, earth_at_night_508_page_176 (Holiday lighting)
- earth_at_night_508_page_104, earth_at_night_508_page_105 (Phoenix grid visibility)

Excluir a conexão entre o agente e o projeto

# Delete the agent
project_client.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print(f"Agent '{agent.name}' version '{agent.version}' deleted successfully.")

# Delete the project connection (Azure Resource Manager)
import requests
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

credential = DefaultAzureCredential()
project_resource_id = "{project_resource_id}"
project_connection_name = "{project_connection_name}"

bearer_token_provider = get_bearer_token_provider(credential, "https://management.azure.com/.default")
headers = {"Authorization": f"Bearer {bearer_token_provider()}"}

response = requests.delete(
  f"https://management.azure.com{project_resource_id}/connections/{project_connection_name}?api-version=2025-10-01-preview",
  headers=headers,
)
response.raise_for_status()
print(f"Project connection '{project_connection_name}' deleted successfully.")

Nota

Excluir a conexão de seu agente e projeto não exclui sua base de conhecimento ou suas fontes de conhecimento. Você deve excluir esses objetos separadamente em seu serviço de Pesquisa de IA do Azure . Para obter mais informações, consulte Excluir uma base de dados de conhecimento e excluir uma fonte de conhecimento.

Solucionando problemas

Esta seção ajuda você a solucionar problemas comuns ao conectar o Foundry Agent Service a uma base de dados de conhecimento do Foundry IQ.

Falhas de autorização (401/403)

  • Se você receber um código 403 do Pesquisa de IA do Azure , verifique se a identidade gerenciada do projeto possui a função Search Index Data Reader no serviço de pesquisa (e Search Index Data Contributor caso você precise gravar em índices).
  • Se você receber um 403 do Azure Resource Manager ao criar ou excluir a conexão do projeto, confirme se o usuário ou a entidade de serviço tem permissões no projeto e no recurso do Microsoft Foundry.
  • Se você utilizar autenticação sem uso de chave, confirme se o ambiente está logado no locatário e na assinatura corretos.

Erros de ponto de extremidade MCP (400/404)

  • Confirme que search_service_endpoint seja a URL do serviço Pesquisa de IA do Azure , como https://<name>.search.windows.net.
  • Confirme knowledge_base_name corresponde à base de conhecimento que você criou no Pesquisa de IA do Azure .
  • Confirme se você usa a versão da 2025-11-01-preview API para o ponto de extremidade MCP da base de dados de conhecimento.

O agente não fundamenta respostas

  • Confirme se o agente tem a ferramenta MCP configurada e allowed_tools inclui knowledge_base_retrieve.
  • Atualize as instruções do agente para exigir explicitamente o uso da base de dados de conhecimento e retornar "não sei" quando a recuperação não contiver a resposta.