diff --git a/agent-framework/TOC.yml b/agent-framework/TOC.yml index f667e37c4..d93957360 100644 --- a/agent-framework/TOC.yml +++ b/agent-framework/TOC.yml @@ -198,8 +198,12 @@ items: href: integrations/ag-ui/frontend-tools.md - name: Security Considerations href: integrations/ag-ui/security-considerations.md + - name: Workflows + href: integrations/ag-ui/workflows.md - name: Human-in-the-Loop href: integrations/ag-ui/human-in-the-loop.md + - name: MCP Apps Compatibility + href: integrations/ag-ui/mcp-apps.md - name: State Management href: integrations/ag-ui/state-management.md - name: Testing with Dojo diff --git a/agent-framework/agents/rag.md b/agent-framework/agents/rag.md index 792c8f000..7e035f544 100644 --- a/agent-framework/agents/rag.md +++ b/agent-framework/agents/rag.md @@ -43,6 +43,9 @@ AIAgent agent = azureOpenAIClient The `TextSearchProvider` requires a function that provides the search results given a query. This can be implemented using any search technology, e.g. Azure AI Search, or a web search engine. +> [!TIP] +> See the [Vector Stores integration](../integrations/index.md#vector-stores) documentation for more information on how to use a vector store for search results. + Here is an example of a mock search function that returns pre-defined results based on the query. `SourceName` and `SourceLink` are optional, but if provided will be used by the agent to cite the source of the information when answering the user's question. diff --git a/agent-framework/integrations/ag-ui/human-in-the-loop.md b/agent-framework/integrations/ag-ui/human-in-the-loop.md index a1c4d89ee..c766b299a 100644 --- a/agent-framework/integrations/ag-ui/human-in-the-loop.md +++ b/agent-framework/integrations/ag-ui/human-in-the-loop.md @@ -629,10 +629,10 @@ The server middleware must remove approval protocol messages after processing: - **Solution**: After converting approval responses, remove both the `request_approval` tool call and its result message - **Reason**: Prevents "tool_calls must be followed by tool messages" errors -## Next Steps +## Next steps - -- **[Explore Function Tools](../../agents/tools/tool-approval.md)**: Learn more about approval patterns in Agent Framework +> [!div class="nextstepaction"] +> [MCP Apps Compatibility](./mcp-apps.md) ::: zone-end @@ -1116,12 +1116,10 @@ def transfer_funds(...): pass def close_account(...): pass ``` -## Next Steps +## Next steps -Now that you understand human-in-the-loop, you can: - -- **[Learn State Management](state-management.md)**: Manage shared state with approval workflows -- **[Explore Advanced Patterns](../../agents/tools/tool-approval.md)**: Learn more about approval patterns in Agent Framework +> [!div class="nextstepaction"] +> [MCP Apps Compatibility](./mcp-apps.md) ## Additional Resources diff --git a/agent-framework/integrations/ag-ui/index.md b/agent-framework/integrations/ag-ui/index.md index 870a31a87..ddbc53bd9 100644 --- a/agent-framework/integrations/ag-ui/index.md +++ b/agent-framework/integrations/ag-ui/index.md @@ -48,7 +48,9 @@ The Agent Framework AG-UI integration supports all 7 AG-UI protocol features: ## Build agent UIs with CopilotKit -[CopilotKit](https://copilotkit.ai/) provides rich UI components for building agent user interfaces based on the standard AG-UI protocol. CopilotKit supports streaming chat interfaces, frontend & backend tool calling, human-in-the-loop interactions, generative UI, shared state, and much more. You can see a examples of the various agent UI scenarios that CopilotKit supports in the [AG-UI Dojo](https://dojo.ag-ui.com/microsoft-agent-framework-dotnet) sample application. +[CopilotKit](https://copilotkit.ai/) provides rich UI components for building agent user interfaces based on the standard AG-UI protocol. CopilotKit supports streaming chat interfaces, frontend & backend tool calling, human-in-the-loop interactions, generative UI, shared state, and much more. You can see examples of the various agent UI scenarios that CopilotKit supports in the [AG-UI Dojo](https://dojo.ag-ui.com/microsoft-agent-framework-dotnet) sample application. + +To connect a CopilotKit React frontend to an Agent Framework AG-UI backend, register your endpoint as an `HttpAgent` in the CopilotKit runtime. This allows CopilotKit's frontend tools to flow through as AG-UI client tools, and all AG-UI features (streaming, approvals, state sync) work automatically. CopilotKit helps you focus on your agent’s capabilities while delivering a polished user experience without reinventing the wheel. To learn more about getting started with Microsoft Agent Framework and CopilotKit, see the [Microsoft Agent Framework integration for CopilotKit](https://docs.copilotkit.ai/microsoft-agent-framework) documentation. @@ -136,8 +138,8 @@ To get started with AG-UI integration: 1. **[Getting Started](getting-started.md)**: Build your first AG-UI server and client 2. **[Backend Tool Rendering](backend-tool-rendering.md)**: Add function tools to your agents - - +3. **[Human-in-the-Loop](human-in-the-loop.md)**: Implement approval workflows +4. **[State Management](state-management.md)**: Synchronize state between client and server ## Additional Resources @@ -244,14 +246,17 @@ To get started with AG-UI integration: 1. **[Getting Started](getting-started.md)**: Build your first AG-UI server and client 2. **[Backend Tool Rendering](backend-tool-rendering.md)**: Add function tools to your agents - - +3. **[Workflows](workflows.md)**: Expose multi-agent workflows through AG-UI +4. **[Human-in-the-Loop](human-in-the-loop.md)**: Implement approval workflows +5. **[MCP Apps Compatibility](mcp-apps.md)**: Use MCP Apps with your AG-UI endpoint +6. **[State Management](state-management.md)**: Synchronize state between client and server ## Additional Resources - [Agent Framework Documentation](../../overview/index.md) - [AG-UI Protocol Documentation](https://docs.ag-ui.com/introduction) - [AG-UI Dojo App](https://dojo.ag-ui.com/) - Example application demonstrating Agent Framework integration +- [CopilotKit MAF Integration](https://docs.copilotkit.ai/microsoft-agent-framework) - Connect CopilotKit React frontends to AG-UI backends - [Agent Framework GitHub Repository](https://github.com/microsoft/agent-framework) ::: zone-end diff --git a/agent-framework/integrations/ag-ui/mcp-apps.md b/agent-framework/integrations/ag-ui/mcp-apps.md new file mode 100644 index 000000000..a4701bdf7 --- /dev/null +++ b/agent-framework/integrations/ag-ui/mcp-apps.md @@ -0,0 +1,113 @@ +--- +title: MCP Apps Compatibility with AG-UI +description: Learn how Agent Framework Python AG-UI endpoints work with CopilotKit's MCPAppsMiddleware for MCP Apps integration +zone_pivot_groups: programming-languages +author: moonbox3 +ms.topic: conceptual +ms.author: evmattso +ms.date: 04/09/2026 +ms.service: agent-framework +--- + +# MCP Apps Compatibility with AG-UI + +::: zone pivot="programming-language-csharp" + +> [!NOTE] +> MCP Apps compatibility documentation for the .NET AG-UI integration is coming soon. + +::: zone-end + +::: zone pivot="programming-language-python" + +Agent Framework Python AG-UI endpoints are compatible with the AG-UI ecosystem's [MCP Apps](https://docs.ag-ui.com/concepts/mcp-apps) feature. MCP Apps allows frontend applications to embed MCP-powered tools and resources alongside your AG-UI agent — no changes needed on the Python side. + +## Architecture + +MCP Apps support is provided by CopilotKit's TypeScript `MCPAppsMiddleware` (`@ag-ui/mcp-apps-middleware`), which sits between the frontend and your Agent Framework backend: + +``` +┌─────────────────────────┐ +│ Frontend │ +│ (CopilotKit / AG-UI) │ +└────────┬────────────────┘ + │ + ▼ +┌─────────────────────────┐ +│ CopilotKit Runtime / │ +│ Node.js Proxy │ +│ + MCPAppsMiddleware │ +└────────┬────────────────┘ + │ AG-UI protocol + ▼ +┌─────────────────────────┐ +│ Agent Framework │ +│ FastAPI AG-UI Endpoint │ +└─────────────────────────┘ +``` + +The middleware layer handles MCP tool discovery, iframe-proxied resource requests, and `ui/resourceUri` resolution. Your Python AG-UI endpoint receives standard AG-UI requests and is unaware of the MCP Apps layer. + +## No Python-Side Changes Required + +MCP Apps integration is entirely handled by the TypeScript middleware. Your existing `add_agent_framework_fastapi_endpoint()` setup works as-is: + +```python +from agent_framework import Agent +from agent_framework.ag_ui import add_agent_framework_fastapi_endpoint +from fastapi import FastAPI + +app = FastAPI() +agent = Agent(name="my-agent", instructions="...", client=chat_client) + +# This endpoint is MCP Apps-compatible with no additional configuration +add_agent_framework_fastapi_endpoint(app, agent, "/") +``` + +This approach is consistent with how MCP Apps works with all other AG-UI Python integrations — the MCP Apps layer is always in the TypeScript middleware, not in the Python backend. + +## Setting Up the Middleware + +To use MCP Apps with your Agent Framework backend, set up a CopilotKit Runtime or Node.js proxy that includes `MCPAppsMiddleware` and points at your Python endpoint: + +```typescript +// Example Node.js proxy configuration (TypeScript) +import { MCPAppsMiddleware } from "@ag-ui/mcp-apps-middleware"; + +const middleware = new MCPAppsMiddleware({ + agents: [ + { + name: "my-agent", + url: "http://localhost:8888/", // Your MAF AG-UI endpoint + }, + ], + mcpApps: [ + // MCP app configurations + ], +}); +``` + +For full setup instructions, see the [CopilotKit MCP Apps documentation](https://docs.copilotkit.ai/copilotkit-mcp/mcp-overview) and the [AG-UI MCP Apps documentation](https://docs.ag-ui.com/concepts/mcp-apps). + +## What Is Not in Scope + +The following are explicitly **not** part of the Python AG-UI integration: + +- **No Python `MCPAppsMiddleware`**: MCP Apps middleware runs in the TypeScript layer only. +- **No FastAPI handling of iframe-proxied MCP requests**: Resource proxying is handled by the Node.js middleware. +- **No Python-side `ui/resourceUri` discovery**: Resource URI resolution is a middleware concern. + +If your application doesn't need the MCP Apps middleware layer, your Agent Framework AG-UI endpoint works directly with any AG-UI-compatible client. + +## Next steps + +> [!div class="nextstepaction"] +> [State Management](./state-management.md) + +## Additional Resources + +- [AG-UI MCP Apps Documentation](https://docs.ag-ui.com/concepts/mcp-apps) +- [CopilotKit MCP Apps Documentation](https://docs.copilotkit.ai/copilotkit-mcp/mcp-overview) +- [Agent Framework GitHub Repository](https://github.com/microsoft/agent-framework) + +::: zone-end diff --git a/agent-framework/integrations/ag-ui/workflows.md b/agent-framework/integrations/ag-ui/workflows.md new file mode 100644 index 000000000..ea6bcda16 --- /dev/null +++ b/agent-framework/integrations/ag-ui/workflows.md @@ -0,0 +1,324 @@ +--- +title: Workflows with AG-UI +description: Learn how to expose Agent Framework workflows through AG-UI with step tracking, interrupt/resume, and custom events +zone_pivot_groups: programming-languages +author: moonbox3 +ms.topic: tutorial +ms.author: evmattso +ms.date: 04/09/2026 +ms.service: agent-framework +--- + +# Workflows with AG-UI + +::: zone pivot="programming-language-csharp" + +> [!NOTE] +> Workflow support for the .NET AG-UI integration is coming soon. + +::: zone-end + +::: zone pivot="programming-language-python" + +This tutorial shows you how to expose Agent Framework workflows through an AG-UI endpoint. Workflows orchestrate multiple agents and tools in a defined execution graph, and the AG-UI integration streams rich workflow events — step tracking, activity snapshots, interrupts, and custom events — to web clients in real time. + +## Prerequisites + +Before you begin, ensure you have: + +- Python 3.10 or later +- `agent-framework-ag-ui` installed +- Familiarity with the [Getting Started](getting-started.md) tutorial +- Basic understanding of Agent Framework [workflows](../../workflows/index.md) + +## When to Use Workflows with AG-UI + +Use a workflow instead of a single agent when you need: + +- **Multi-agent orchestration**: Route tasks between specialized agents (for example, triage → refund → order) +- **Structured execution steps**: Track progress through defined stages with `STEP_STARTED` / `STEP_FINISHED` events +- **Interrupt / resume flows**: Pause execution to collect human input or approvals, then resume +- **Custom event streaming**: Emit domain-specific events (`request_info`, `status`, `workflow_output`) to the client + +## Wrapping a Workflow with AgentFrameworkWorkflow + +`AgentFrameworkWorkflow` is a lightweight wrapper that adapts a native `Workflow` to the AG-UI protocol. You can provide either a pre-built workflow instance or a factory that creates a new workflow per thread. + +### Direct instance + +Use a direct instance when a single workflow object can safely serve all requests (for example, stateless pipelines): + +```python +from agent_framework import Workflow +from agent_framework.ag_ui import AgentFrameworkWorkflow + +workflow = build_my_workflow() # returns a Workflow + +ag_ui_workflow = AgentFrameworkWorkflow( + workflow=workflow, + name="my-workflow", + description="Single-instance workflow.", +) +``` + +### Thread-scoped factory + +Use `workflow_factory` when each conversation thread needs its own workflow state. The factory receives the `thread_id` and returns a fresh `Workflow`: + +```python +from agent_framework.ag_ui import AgentFrameworkWorkflow + +ag_ui_workflow = AgentFrameworkWorkflow( + workflow_factory=lambda thread_id: build_my_workflow(), + name="my-workflow", + description="Thread-scoped workflow.", +) +``` + +> [!IMPORTANT] +> You must pass **either** `workflow` **or** `workflow_factory`, not both. The wrapper raises a `ValueError` if both are provided. + +## Registering the Endpoint + +Register the workflow with `add_agent_framework_fastapi_endpoint` the same way you would register a single agent: + +```python +from fastapi import FastAPI +from agent_framework.ag_ui import ( + AgentFrameworkWorkflow, + add_agent_framework_fastapi_endpoint, +) + +app = FastAPI(title="Workflow AG-UI Server") + +ag_ui_workflow = AgentFrameworkWorkflow( + workflow_factory=lambda thread_id: build_my_workflow(), + name="handoff-demo", + description="Multi-agent handoff workflow.", +) + +add_agent_framework_fastapi_endpoint( + app=app, + agent=ag_ui_workflow, + path="/workflow", +) +``` + +You can also pass a bare `Workflow` directly — the endpoint auto-wraps it in `AgentFrameworkWorkflow`: + +```python +add_agent_framework_fastapi_endpoint(app, my_workflow, "/workflow") +``` + +## AG-UI Events Emitted by Workflows + +Workflow runs emit a richer set of AG-UI events compared to single-agent runs: + +| Event | When emitted | Description | +|---|---|---| +| `RUN_STARTED` | Run begins | Marks the start of workflow execution | +| `STEP_STARTED` | An executor or superstep begins | `step_name` identifies the agent or step (for example, `"triage_agent"`) | +| `TEXT_MESSAGE_*` | Agent produces text | Standard streaming text events | +| `TOOL_CALL_*` | Agent invokes a tool | Standard tool call events | +| `STEP_FINISHED` | An executor or superstep completes | Closes the step for UI progress tracking | +| `CUSTOM` (`status`) | Workflow state changes | Contains `{"state": ""}` in the event value | +| `CUSTOM` (`request_info`) | Workflow requests human input | Contains the request payload for the client to render a prompt | +| `CUSTOM` (`workflow_output`) | Workflow produces output | Contains the final or intermediate output data | +| `RUN_FINISHED` | Run completes | May include `interrupts` if the workflow is waiting for input | + +Clients can use `STEP_STARTED` / `STEP_FINISHED` events to render progress indicators showing which agent is currently active. + +## Interrupt and Resume + +Workflows can pause execution to collect human input or tool approvals. The AG-UI integration handles this through the interrupt/resume protocol. + +### How interrupts work + +1. During execution, the workflow raises a pending request (for example, a `HandoffAgentUserRequest` asking for more details, or a tool with `approval_mode="always_require"`). +2. The AG-UI bridge emits a `CUSTOM` event with `name="request_info"` containing the request data. +3. The run finishes with a `RUN_FINISHED` event whose `interrupts` field contains a list of pending request objects: + + ```json + { + "type": "RUN_FINISHED", + "threadId": "abc123", + "runId": "run_xyz", + "interrupts": [ + { + "id": "request-id-1", + "value": { "request_type": "HandoffAgentUserRequest", "data": "..." } + } + ] + } + ``` + +4. The client renders UI for the user to respond (a text input, an approval button, etc.). + +### How resume works + +The client sends a new request with the `resume` payload containing the user's responses keyed by interrupt ID: + +```json +{ + "threadId": "abc123", + "messages": [], + "resume": { + "interrupts": [ + { + "id": "request-id-1", + "value": "User's response text or approval decision" + } + ] + } +} +``` + +The server converts the resume payload into workflow responses and continues execution from where it paused. + +## Complete Example: Multi-Agent Handoff Workflow + +This example shows a customer-support workflow with three agents that hand off work to each other, use tools requiring approval, and request human input when needed. + +### Define the agents and tools + +```python +"""AG-UI workflow server with multi-agent handoff.""" + +import os + +from agent_framework import Agent, Message, Workflow, tool +from agent_framework.ag_ui import ( + AgentFrameworkWorkflow, + add_agent_framework_fastapi_endpoint, +) +from agent_framework.azure import AzureOpenAIResponsesClient +from agent_framework.orchestrations import HandoffBuilder +from azure.identity import AzureCliCredential +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + + +@tool(approval_mode="always_require") +def submit_refund(refund_description: str, amount: str, order_id: str) -> str: + """Capture a refund request for manual review before processing.""" + return f"Refund recorded for order {order_id} (amount: {amount}): {refund_description}" + + +@tool(approval_mode="always_require") +def submit_replacement(order_id: str, shipping_preference: str, replacement_note: str) -> str: + """Capture a replacement request for manual review before processing.""" + return f"Replacement recorded for order {order_id} (shipping: {shipping_preference}): {replacement_note}" + + +@tool(approval_mode="never_require") +def lookup_order_details(order_id: str) -> dict[str, str]: + """Return order details for a given order ID.""" + return { + "order_id": order_id, + "item_name": "Wireless Headphones", + "amount": "$129.99", + "status": "delivered", + } +``` + +### Build the workflow + +```python +def create_handoff_workflow() -> Workflow: + """Build a handoff workflow with triage, refund, and order agents.""" + client = AzureOpenAIResponsesClient( + project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"], + deployment_name=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"], + credential=AzureCliCredential(), + ) + + triage = Agent(id="triage_agent", name="triage_agent", instructions="...", client=client) + refund = Agent(id="refund_agent", name="refund_agent", instructions="...", client=client, + tools=[lookup_order_details, submit_refund]) + order = Agent(id="order_agent", name="order_agent", instructions="...", client=client, + tools=[lookup_order_details, submit_replacement]) + + def termination_condition(conversation: list[Message]) -> bool: + for msg in reversed(conversation): + if msg.role == "assistant" and (msg.text or "").strip().lower().endswith("case complete."): + return True + return False + + builder = HandoffBuilder( + name="support_workflow", + participants=[triage, refund, order], + termination_condition=termination_condition, + ) + builder.add_handoff(triage, [refund], description="Route refund requests.") + builder.add_handoff(triage, [order], description="Route replacement requests.") + builder.add_handoff(refund, [order], description="Route to order after refund.") + builder.add_handoff(order, [triage], description="Route back after completion.") + + return builder.with_start_agent(triage).build() +``` + +### Create the FastAPI app + +```python +app = FastAPI(title="Workflow AG-UI Demo") +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +ag_ui_workflow = AgentFrameworkWorkflow( + workflow_factory=lambda _thread_id: create_handoff_workflow(), + name="support_workflow", + description="Customer support handoff workflow.", +) + +add_agent_framework_fastapi_endpoint( + app=app, + agent=ag_ui_workflow, + path="/support", +) + +if __name__ == "__main__": + import uvicorn + uvicorn.run(app, host="127.0.0.1", port=8888) +``` + +### Event sequence + +A typical multi-turn interaction produces events like: + +``` +RUN_STARTED threadId=abc123 +STEP_STARTED stepName=triage_agent +TEXT_MESSAGE_START role=assistant +TEXT_MESSAGE_CONTENT delta="I'll look into your refund..." +TEXT_MESSAGE_END +STEP_FINISHED stepName=triage_agent +STEP_STARTED stepName=refund_agent +TOOL_CALL_START toolCallName=lookup_order_details +TOOL_CALL_ARGS delta='{"order_id":"12345"}' +TOOL_CALL_END +TOOL_CALL_START toolCallName=submit_refund +TOOL_CALL_ARGS delta='{"order_id":"12345","amount":"$129.99",...}' +TOOL_CALL_END +RUN_FINISHED interrupts=[{id: "...", value: {function_approval_request}}] +``` + +The client can then display an approval dialog and resume with the user's decision. + +## Next steps + +> [!div class="nextstepaction"] +> [Human-in-the-Loop](./human-in-the-loop.md) + +## Additional Resources + +- [AG-UI Overview](index.md) +- [Getting Started](getting-started.md) +- [Agent Framework Workflows](../../workflows/index.md) +- [Agent Framework GitHub Repository](https://github.com/microsoft/agent-framework) + +::: zone-end diff --git a/agent-framework/integrations/chat-history-memory-provider.md b/agent-framework/integrations/chat-history-memory-provider.md index 7bb960cc3..e5ab2fffd 100644 --- a/agent-framework/integrations/chat-history-memory-provider.md +++ b/agent-framework/integrations/chat-history-memory-provider.md @@ -27,11 +27,14 @@ Stored messages are scoped using configurable identifiers (application, agent, u ## Prerequisites -- A vector store implementation from [Microsoft.Extensions.VectorData](https://www.nuget.org/packages/Microsoft.Extensions.VectorData.Abstractions) (for example, [`InMemoryVectorStore`](https://www.nuget.org/packages/Microsoft.SemanticKernel.Connectors.InMemory), [Azure AI Search](https://www.nuget.org/packages/Microsoft.SemanticKernel.Connectors.AzureAISearch), or [other supported stores](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors)) +- A vector store implementation from 📦 [Microsoft.Extensions.VectorData.Abstractions](https://www.nuget.org/packages/Microsoft.Extensions.VectorData.Abstractions) (for example, 📦 [`InMemoryVectorStore`](https://www.nuget.org/packages/Microsoft.SemanticKernel.Connectors.InMemory), 📦 [Azure AI Search](https://www.nuget.org/packages/Microsoft.SemanticKernel.Connectors.AzureAISearch), or [other supported stores](./index.md#vector-store-abstraction-implementations)) - An embedding model configured on your vector store - Azure OpenAI or OpenAI deployment for the chat model - .NET 8.0 or later +> [!TIP] +> See the [Vector Stores integration](./index.md#vector-stores) documentation for more information on the VectorData abstraction and available implementations. + ## Usage The following example demonstrates creating an agent with the `ChatHistoryMemoryProvider` using an in-memory vector store. diff --git a/agent-framework/integrations/index.md b/agent-framework/integrations/index.md index 657becd30..9bd4a6243 100644 --- a/agent-framework/integrations/index.md +++ b/agent-framework/integrations/index.md @@ -100,6 +100,56 @@ Here is a list of existing providers that can be used. ::: zone-end +## Vector Stores + +Microsoft Agent Framework supports integration with many different vector stores. These can be useful for doing Retrieval Augmented Generation (RAG) or storage of memories. + +::: zone pivot="programming-language-csharp" + +To integrate with vector stores, we rely on the 📦 [Microsoft.Extensions.VectorData.Abstractions](https://www.nuget.org/packages/Microsoft.Extensions.VectorData.Abstractions) package which provides a unified layer of abstractions for interacting with vector stores in .NET. +These abstractions let you write simple, high-level code against a single API, and swap out the underlying vector store with minimal changes to your application. Where Agent Framework components rely on a vector store, they use these abstractions to allow you to choose your preferred implementation. + +> [!TIP] +> See the [Vector databases for .NET AI apps](/dotnet/ai/vector-stores/overview) documentation for more information on how to ingest data into a vector store, generate embeddings, and do vector or hybrid searches. + +### Vector Store Abstraction Implementations + +| Implementation | C# | Uses officially supported SDK | Maintainer / Vendor | +| ---------------------------------------------------------------------------------------------------------------------------- | :------------------------: | :---------------------------: | :-----------------: | +| [Azure AI Search](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/azure-ai-search-connector) | ✅ | ✅ | Microsoft | +| [Cosmos DB MongoDB (vCore)](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/azure-cosmosdb-mongodb-connector) | ✅ | ✅ | Microsoft | +| [Cosmos DB No SQL](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/azure-cosmosdb-nosql-connector) | ✅ | ✅ | Microsoft | +| [Couchbase](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/couchbase-connector) | ✅ | ✅ | Couchbase | +| [Elasticsearch](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/elasticsearch-connector) | ✅ | ✅ | Elastic | +| [In-Memory](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/inmemory-connector) | ✅ | N/A | Microsoft | +| [MongoDB](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/mongodb-connector) | ✅ | ✅ | Microsoft | +| [Neon Serverless Postgres](https://neon.com) | Use [Postgres Connector](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/postgres-connector) | ✅ | Microsoft | +| [Oracle](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/oracle-connector) | ✅ | ✅ | Oracle | +| [Pinecone](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/pinecone-connector) | ✅ | ❌ | Microsoft | +| [Postgres](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/postgres-connector) | ✅ | ✅ | Microsoft | +| [Qdrant](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/qdrant-connector) | ✅ | ✅ | Microsoft | +| [Redis](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/redis-connector) | ✅ | ✅ | Microsoft | +| [SQL Server](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/sql-connector) | ✅ | ✅ | Microsoft | +| [SQLite](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/sqlite-connector) | ✅ | ✅ | Microsoft | +| [Volatile (In-Memory)](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/volatile-connector) | Deprecated (use In-Memory) | N/A | Microsoft | +| [Weaviate](/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/weaviate-connector) | ✅ | ✅ | Microsoft | + +> [!IMPORTANT] +> The vector store abstraction implementations are built by a variety of sources. Not all connectors are maintained by Microsoft. When considering an implementation, be sure to evaluate quality, licensing, support, etc. to ensure they meet your requirements. Also make sure you review each provider's documentation for detailed version compatibility information. + +> [!IMPORTANT] +> Some implementations are internally using Database SDKs that are not officially supported by Microsoft or by the Database provider. The *Uses Officially supported SDK* column lists which are using officially supported SDKs and which are not. + +::: zone-end + +::: zone pivot="programming-language-python" + +Agent Framework supports using Semantic Kernel's VectorStore collections to provide vector storage capabilities to agents. +See [the vector store connectors documentation](/semantic-kernel/concepts/vector-store-connectors) to learn how to set up different vector store collections. +See [Creating a search tool from a VectorStore](../agents/rag.md#creating-a-search-tool-from-vectorstore) for more information on how to use these for RAG. + +::: zone-end + ## Next steps > [!div class="nextstepaction"] diff --git a/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/index.md b/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/index.md index 226a18cd8..58068a467 100644 --- a/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/index.md +++ b/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/index.md @@ -1,5 +1,5 @@ --- -title: Out-of-the-box Vector Store connectors (Preview) +title: Out-of-the-box Vector Store connectors description: Out-of-the-box Vector Store connectors zone_pivot_groups: programming-languages author: westey-m @@ -8,16 +8,13 @@ ms.author: westey ms.date: 07/08/2024 ms.service: semantic-kernel --- -# Out-of-the-box Vector Store connectors (Preview) +# Out-of-the-box Vector Store connectors ::: zone pivot="programming-language-csharp" ::: zone-end ::: zone pivot="programming-language-python" -> [!WARNING] -> The Semantic Kernel Vector Store functionality is in preview, and improvements that require breaking changes may still occur in limited circumstances before release. - ::: zone-end ::: zone pivot="programming-language-java" @@ -37,25 +34,25 @@ Semantic Kernel provides a number of out-of-the-box Vector Store integrations ma | Vector Store Connectors | C# | Uses officially supported SDK | Maintainer / Vendor | | ------------------------------------------------------------------ | :--------------------------: | :----------------------------: | :-------------------------------: | -| [Azure AI Search](./azure-ai-search-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [Cosmos DB MongoDB (vCore)](./azure-cosmosdb-mongodb-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [Cosmos DB No SQL](./azure-cosmosdb-nosql-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | +| [Azure AI Search](./azure-ai-search-connector.md) | ✅ | ✅ | Microsoft | +| [Cosmos DB MongoDB (vCore)](./azure-cosmosdb-mongodb-connector.md) | ✅ | ✅ | Microsoft | +| [Cosmos DB No SQL](./azure-cosmosdb-nosql-connector.md) | ✅ | ✅ | Microsoft | | [Couchbase](./couchbase-connector.md) | ✅ | ✅ | Couchbase | | [Elasticsearch](./elasticsearch-connector.md) | ✅ | ✅ | Elastic | | Chroma | Planned | | | -| [In-Memory](./inmemory-connector.md) | ✅ | N/A | Microsoft Semantic Kernel Project | +| [In-Memory](./inmemory-connector.md) | ✅ | N/A | Microsoft | | Milvus | Planned | | | -| [MongoDB](./mongodb-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [Neon Serverless Postgres](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/neon1722366567200.neon_serverless_postgres_azure_prod) |Use [Postgres Connector](./postgres-connector.md)| ✅ | Microsoft Semantic Kernel Project | +| [MongoDB](./mongodb-connector.md) | ✅ | ✅ | Microsoft | +| [Neon Serverless Postgres](https://neon.com/) |Use [Postgres Connector](./postgres-connector.md) | ✅ | Microsoft | | [Oracle](./oracle-connector.md) | ✅ | ✅ | Oracle | -| [Pinecone](./pinecone-connector.md) | ✅ | ❌ | Microsoft Semantic Kernel Project | -| [Postgres](./postgres-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [Qdrant](./qdrant-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [Redis](./redis-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [SQL Server](./sql-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [SQLite](./sqlite-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [Volatile (In-Memory)](./volatile-connector.md) | Deprecated (use In-Memory) | N/A | Microsoft Semantic Kernel Project | -| [Weaviate](./weaviate-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | +| [Pinecone](./pinecone-connector.md) | ✅ | ❌ | Microsoft | +| [Postgres](./postgres-connector.md) | ✅ | ✅ | Microsoft | +| [Qdrant](./qdrant-connector.md) | ✅ | ✅ | Microsoft | +| [Redis](./redis-connector.md) | ✅ | ✅ | Microsoft | +| [SQL Server](./sql-connector.md) | ✅ | ✅ | Microsoft | +| [SQLite](./sqlite-connector.md) | ✅ | ✅ | Microsoft | +| [Volatile (In-Memory)](./volatile-connector.md) | Deprecated (use In-Memory) | N/A | Microsoft | +| [Weaviate](./weaviate-connector.md) | ✅ | ✅ | Microsoft | ::: zone-end ::: zone pivot="programming-language-python" @@ -70,8 +67,8 @@ Semantic Kernel provides a number of out-of-the-box Vector Store integrations ma | [Faiss](./faiss-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | | [In-Memory](./inmemory-connector.md) | ✅ | N/A | Microsoft Semantic Kernel Project | | [MongoDB](./mongodb-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | -| [Neon Serverless Postgres](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/neon1722366567200.neon_serverless_postgres_azure_prod) |Use [Postgres Connector](./postgres-connector.md)| ✅ | Microsoft Semantic Kernel Project | -| [Oracle](./oracle-connector.md) | ✅ | ✅ | Oracle | +| [Neon Serverless Postgres](https://neon.com/) |Use [Postgres Connector](./postgres-connector.md) | ✅ | Microsoft Semantic Kernel Project | +| [Oracle](./oracle-connector.md) | ✅ | ✅ | Oracle | | [Pinecone](./pinecone-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | | [Postgres](./postgres-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | | [Qdrant](./qdrant-connector.md) | ✅ | ✅ | Microsoft Semantic Kernel Project | diff --git a/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/postgres-connector.md b/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/postgres-connector.md index 3323e9069..62e2d5779 100644 --- a/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/postgres-connector.md +++ b/semantic-kernel/concepts/vector-store-connectors/out-of-the-box-connectors/postgres-connector.md @@ -33,7 +33,7 @@ ms.service: semantic-kernel ## Overview -The Postgres Vector Store connector can be used to access and manage data in Postgres and also supports [Neon Serverless Postgres](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/neon1722366567200.neon_serverless_postgres_azure_prod). +The Postgres Vector Store connector can be used to access and manage data in Postgres and also supports [Neon Serverless Postgres](https://neon.com/). The connector has the following characteristics. diff --git a/semantic-kernel/media/azure-ai-foundry-attach-app-insights.png b/semantic-kernel/media/azure-ai-foundry-attach-app-insights.png index 94146a4a2..fc0db7556 100644 Binary files a/semantic-kernel/media/azure-ai-foundry-attach-app-insights.png and b/semantic-kernel/media/azure-ai-foundry-attach-app-insights.png differ