Microsoft Foundry (Azure AI Foundry) + Neo4j 集成

概述

Microsoft Foundry(前身为 Azure AI Foundry,于 2025 年 11 月更名)是微软的企业级 AI 平台。它是唯一一个同时提供 Claude 和 GPT 模型,并具备企业级治理、原生 MCP + A2A 协议支持以及全面身份管理的云平台。

核心功能

  • 原生 MCP + A2A 协议支持

  • 提供 Claude 和 GPT 模型

  • 企业身份认证 (Azure AD/Entra ID)

  • 记忆、可观测性、评估

  • 策略控制与治理

  • 跨云灵活性

官方资源

扩展点

1. MCP 集成(原生)

Microsoft Foundry 对 MCP 拥有顶级支持,并提供三种 OAuth 设置类型:

  1. 动态发现 (Dynamic Discovery) - 通过 DCR 自动发现端点

  2. 动态无发现 (Dynamic without discovery) - 使用 DCR 手动配置端点

  3. 手动 (Manual) - 完全手动设置 OAuth 2.0

配置

{
  "mcp_servers": {
    "neo4j": {
      "url": "https://your-neo4j-mcp-server.com/mcp",
      "auth": {
        "type": "oauth2",
        "authorization_url": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize",
        "token_url": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token",
        "client_id": "your-client-id",
        "client_secret": "your-client-secret",
        "scope": "api://your-app-id/.default"
      }
    }
  }
}

2. Copilot Studio 集成

在 Copilot Studio 中构建智能体,并使用 Neo4j MCP 服务器作为数据源。

3. 直接集成

使用 Azure Functions 或 Azure Container Apps 配合 Neo4j 驱动程序实现自定义工具。

MCP 身份验证

API 密钥 - 支持作为标头或查询参数

Azure AD 客户端凭据 (主要)

  • 完整的 OAuth 2.0 客户端凭据流

  • 使用客户端 ID/密钥进行应用注册

M2M OIDC - Azure AD/Entra ID

  • 动态客户端注册 (DCR)

  • 手动 OAuth 配置

  • 支持多个身份提供商

其他机制

  • Azure 资源的托管身份 (Managed Identity)

  • 服务主体 (Service Principals)

  • 用于额外验证层的 APIM

  • 云部署的 CORS 配置

行业研究智能体示例

实施

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from neo4j import GraphDatabase
import os

# Azure AI Foundry setup
credential = DefaultAzureCredential()
project_client = AIProjectClient(
    endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
    credential=credential
)

# Neo4j setup
driver = GraphDatabase.driver(
    "neo4j+s://demo.neo4jlabs.com:7687",
    auth=("companies", "companies")
)

# Define Neo4j tools
def query_company(company_name: str) -> dict:
    """Query company information from Neo4j."""
    query = """
        MATCH (o:Organization {name: $company})
        RETURN o.name as name,
               [(o)-[:LOCATED_IN]->(loc:Location) | loc.name] as locations,
               [(o)-[:IN_INDUSTRY]->(ind:Industry) | ind.name] as industries,
               [(o)<-[:WORKS_FOR]-(p:Person) | {name: p.name, title: p.title}][..5] as leadership
        LIMIT 1
    """
    records, summary, keys = driver.execute_query(
        query,
        company=company_name,
        database_="companies"
    )
    return records[0].data() if records else {}

def search_news(company_name: str, query: str) -> list:
    """Search news articles about a company."""
    query_str = """
        MATCH (o:Organization {name: $company})<-[:MENTIONS]-(a:Article)
        RETURN a.title as title, a.date as date
        ORDER BY a.date DESC
        LIMIT 5
    """
    records, summary, keys = driver.execute_query(
        query_str,
        company=company_name,
        database_="companies"
    )
    return [r.data() for r in records]

# Create agent with tools
agent = project_client.agents.create_agent(
    model="gpt-4",
    name="investment_researcher",
    instructions="""You are an investment research analyst.
    Use the available tools to research companies and generate reports.""",
    tools=[
        {"type": "function", "function": query_company},
        {"type": "function", "function": search_news}
    ]
)

# Or use MCP server
mcp_tools = project_client.mcp.get_tools("neo4j")
agent = project_client.agents.create_agent(
    model="claude-3-5-sonnet-20241022",  # Foundry supports both Claude and GPT
    name="investment_researcher",
    tools=mcp_tools
)

# Execute research
thread = project_client.agents.create_thread()
message = project_client.agents.create_message(
    thread_id=thread.id,
    role="user",
    content="Research Google's recent activities and generate a report"
)

run = project_client.agents.create_run(
    thread_id=thread.id,
    agent_id=agent.id
)

# Wait for completion and get results
result = project_client.agents.get_run(thread.id, run.id)
messages = project_client.agents.list_messages(thread.id)

挑战与差距

当前局限性

  1. 身份验证的复杂性

    • OAuth 2.0 设置需要 Azure AD 应用注册

    • 多种配置选项可能会令人困惑

    • 令牌管理需要对 Azure 身份系统有一定理解

  2. 成本结构

    • 企业定价模式

    • 包含 Azure 基础设施费用和模型使用费

  3. 供应商锁定顾虑

    • 尽管具备跨云能力,但 Azure 原生功能最为成熟

    • 部分功能与 Azure 服务深度绑定

权宜之计

开发环境的简化认证

# Use Azure CLI credentials for local dev
from azure.identity import AzureCliCredential
credential = AzureCliCredential()

更多集成机会

1. Azure 服务集成

  • 使用 Azure Key Vault 管理密钥

  • 使用 Azure Monitor 进行可观测性监控

  • 使用 Azure Container Apps 托管 MCP 服务器

  • 使用 Azure API Management 进行治理

2. Copilot Studio 低代码开发

  • 可视化构建智能体

  • 将 Neo4j MCP 服务器作为连接器使用

  • 内置企业治理功能

3. 多模型支持

  • 使用 Claude 处理复杂推理

  • 使用 GPT 进行高性价比查询

  • 根据任务进行模型路由

资源

状态

  • ✅ 原生 MCP + A2A 支持

  • ✅ 同时支持 Claude 和 GPT 模型

  • ✅ 带有 DCR 的企业级 OAuth 2.0

  • ✅ 全面的治理

  • 工作量评分: 6.5/10

  • 影响力评分: 7.3/10

© . This site is unofficial and not affiliated with Neo4j, Inc.