Skip to content

Microsoft.Extensions.AI Integration

Cross-SDK comparison

See the centralized MEAI documentation for feature matrices and comparisons across all tryAGI SDKs.

The Recombee SDK provides AIFunction tool wrappers compatible with Microsoft.Extensions.AI. These tools can be used with any IChatClient to give AI models access to Recombee's personalized item recommendations, search, interaction recording, and catalog browsing.

Installation

1
dotnet add package Recombee

Available Tools

Method Tool Name Description
AsRecommendItemsTool(databaseId) RecommendItems Get personalized item recommendations for a user
AsSearchItemsTool(databaseId) SearchItems Search items with personalized full-text search
AsAddInteractionTool(databaseId) AddInteraction Record user interactions (view, purchase, rating, bookmark, cart)
AsListItemsTool(databaseId) ListItems List items in the catalog with optional filter

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using Recombee;
using Microsoft.Extensions.AI;

var recombeeClient = new RecombeeClient(
    apiKey: Environment.GetEnvironmentVariable("RECOMBEE_API_KEY")!,
    baseUri: new Uri("https://rapi-us-west.recombee.com"));

var databaseId = Environment.GetEnvironmentVariable("RECOMBEE_DATABASE_ID")!;

var options = new ChatOptions
{
    Tools =
    [
        recombeeClient.AsRecommendItemsTool(databaseId),
        recombeeClient.AsSearchItemsTool(databaseId),
        recombeeClient.AsAddInteractionTool(databaseId),
        recombeeClient.AsListItemsTool(databaseId),
    ],
};

IChatClient chatClient = /* your chat client */;

var messages = new List<ChatMessage>
{
    new(ChatRole.User, "Get personalized recommendations for user 'user-123' and search for 'wireless headphones'."),
};

while (true)
{
    var response = await chatClient.GetResponseAsync(messages, options);
    messages.AddRange(response.ToChatMessages());

    if (response.FinishReason == ChatFinishReason.ToolCalls)
    {
        var results = await response.CallToolsAsync(options);
        messages.AddRange(results);
        continue;
    }

    Console.WriteLine(response.Text);
    break;
}