Обработка аутентификации инструмента с помощью Azure Foundry AGUI в C#/BlazorC#

Место общения программистов C#
Ответить
Anonymous
 Обработка аутентификации инструмента с помощью Azure Foundry AGUI в C#/Blazor

Сообщение Anonymous »

У меня есть настройка сервера Azure Foundry с ChatGPT 4.1, я настроил свои инструкции и добавил свой собственный сервер MCP в качестве инструмента.
Если я использую игровую площадку в Foundry, агент реагирует соответствующим образом. Когда я пытаюсь использовать сервер MCP, мне предоставляется ссылка для аутентификации (опять же, это ожидаемо, поскольку сервер mcp требует аутентификации), если я прохожу аутентификацию, игровая площадка может использовать MCP, и я получаю ожидаемые данные.
Я хочу иметь клиент чата, написанный на Blazor, поэтому я настроил бэкэнд для установления соединения с Foundry с конечной точкой API для вызова с сообщениями чата (код ниже).
Если я отключу инструмент MCP тогда код работает отлично, сообщения передаются агенту, а ответы передаются обратно в соответствии с инструкциями, данными агенту в Foundry.
Если я включаю инструмент MCP, я получаю ответ от Foundry, но он не соответствует типам контента, которые руководство предлагает использовать для потоковых данных (например, FunctionToolContent, ToolCallContent, DataContent, TextContent, ErrorContent) и поэтому не позволяет мне идентифицировать его для отображения. Я почти уверен, что этот ответ предназначен для ответа на аутентификацию MCP. Я почти уверен в этом, потому что если я удалю свой инструмент и добавлю «веб-поиск» (который не требует аутентификации), я смогу успешно запустить этот инструмент из моего интерфейса (если я попрошу его выполнить веб-поиск, чтобы найти ответ на вопрос).
Я проверил обновление, ChatUpdate и отдельные объекты содержимого, и в ответе нет ничего, что могло бы помочь мне определить, что это ссылка для аутентификации. Насколько я понимаю, библиотека Microsoft AGUI принимает ответы от Foundry и структурирует ответы так, чтобы они относились к определенным типам, чтобы их было легче обрабатывать, поэтому возможно, что в настоящее время это не поддерживается библиотекой (что разрушило бы мои планы). Я ценю, что AGUI является новым протоколом, но, попробовав использовать API OpenAI в Foundry и обнаружив его ограниченность, я был впечатлен простотой использования библиотек AGUI.
Кто-нибудь знает, как я могу идентифицировать и обрабатывать запрос аутентификации инструмента на внешнем интерфейсе?
Внутренний код

Код: Выделить всё

using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Hosting.AGUI.AspNetCore;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient().AddLogging();
builder.Services.AddAGUI();

WebApplication app = builder.Build();

const string endpoint = "";
const string agentId = "";

// Connect to the existing AI agent
AIAgent agent = new AIProjectClient(
new Uri(endpoint),
new DefaultAzureCredential())
.AsAIAgent(agentId);

// Map the AG-UI agent endpoint
app.MapAGUI("/", agent);

await app.RunAsync();
Код внешнего интерфейса

Код: Выделить всё

        StringBuilder finalMessage = new StringBuilder();
messages.Add(new Microsoft.Extensions.AI.ChatMessage(Microsoft.Extensions.AI.ChatRole.User, text));

await foreach (AgentResponseUpdate update in agent.RunStreamingAsync(messages, session))
{

ChatResponseUpdate chatUpdate = update.AsChatResponseUpdate();
// Display streaming text content
if (update.Contents.Count > 0)
{
foreach (AIContent content in update.Contents)
{
if (content is DataContent dataContent)
{
finalMessage.Append("DATACONTENT:" + JsonSerializer.Serialize(dataContent));
}
if (content is FunctionCallContent functionCallContent)
{

}
if (content is ToolCallContent toolCallContent)
{
finalMessage.Append(JsonSerializer.Serialize(content));
}
if (content is TextContent textContent)
{
finalMessage.Append(textContent.Text);
InProgressMessage += textContent.Text;
StateHasChanged();
}
else if (content is ErrorContent errorContent)
{
finalMessage.Append("THERE WAS AN ERROR: " + errorContent.Message);
InProgressMessage = finalMessage.ToString();
}
}
}
else
{
finalMessage.Append(JsonSerializer.Serialize(update));
}
}
messages.Add(new ChatMessage(ChatRole.Assistant, finalMessage.ToString()));
InProgressMessage = string.Empty;
Во избежание сомнений, когда я получаю ответ на ссылку аутентификации MCP, update.Contents.Count равен 0, что означает, что он попадает в последний оператор else с содержимым update, не предоставляющим ничего примечательного.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»