DevExpress Blazor中文教程:AI聊天 - 如何完成工具呼叫确认?(一)

翻译|使用教程|编辑:龚雪|2025-08-28 11:15:32.987|阅读 11 次

概述:本文主要介绍了Tool Call Confirmation API层和DevExpress Blazor AI Chat组件的相关可自定义接口,欢迎下载最新版体验!

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。

现代AI驱动的应用程序通常会自动执行工具来响应用户查询,虽然这种自动化包含了llm的潜力并改善了用户体验,但在未经用户明确同意的情况下调用敏感操作(例如,修改数据库、发送电子邮件或对外部服务进行API调用)时,它可能会引入安全风险。

本文主要介绍了Tool Call Confirmation API(工具调用)层和DevExpress Blazor AI Chat组件的相关可自定义接口的目的,DevExpress的解决方案拦截AI发起的函数调用,生成详细的确认对话框,并在执行前需要用户批准,这种UI模式在GitHub Copilot Chat、Cursor、Claude和其他具有MCP支持的AI驱动应用程序中很常见。

界面控件DevExpress Blazor中文教程图集

在本文中,我们将带大家了解DevExpress的AI聊天确认系统、它的关键组件和自定义选项(当然还会向您展示如何使用DevExpress Blazor AI Chat控件将这个安全层添加到AI驱动的Blazor应用程序中)。

获取DevExpress v25.1正式版下载

DevExpress技术交流群11:749942875      欢迎一起进群讨论


挑战:平衡自动化和安全性

AI函数调用是一种强大的资源,它允许模型与应用程序功能无缝交互。然而必须负责任地使用这种能力,考虑以下使用场景:

  • AI模型删除用户数据来响应不明确的请求。
  • 非托管API调用会产生意想不到的成本或触发外部流程。
  • 函数在用户不知情的情况下修改应用程序状态或UI。

本文中描述的技术在便利性和控制性之间取得了平衡:它保留了自动工具调用的好处,并为用户提供了对敏感或不可逆操作的明确权限。

开始前

在您的Blazor应用程序中创建和配置DevExpress Blazor Chat (DxAIChat)组件。

这个例子的目标是Azure OpenAI,但是这个解决方案与任何实现了来自 "Microsoft.Extensions.AI"库的IChatClient接口的AI服务兼容。

Program.cs中的以下代码定义了基本配置:

using Azure;
using Azure.AI.OpenAI;
using Microsoft.Extensions.AI;

var builder = WebApplication.CreateBuilder(args);

// Replace with your endpoint, API key, and model's deployment name
string azureOpenAIEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string azureOpenAIKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
string deploymentName = "your-model-deployment-name";

var azureChatClient = new AzureOpenAIClient(
new Uri(azureOpenAIEndpoint),
new AzureKeyCredential(azureOpenAIKey))
.GetChatClient(deploymentName)
.AsIChatClient();

builder.Services.AddDevExpressBlazor();
builder.Services.AddDevExpressAI();
架构概述
  • IToolCallFilter
    在AI工具调用执行之前管理它们。
  • CustomFunctionInvokingChatClient
    扩展用于调用工具的默认操作。
  • CustomFunctionInvokingChatClientExtensions
    在构建聊天客户端时,Fluent API允许您通过一行配置来利用工具调用确认。
  • 确认界面
    显示用于确认工具调用的对话框。
管理工具调用

DevExpress确认系统的核心是IToolCallFilter接口——这个接口定义了聊天器拦截和管理函数调用的方式。

public interface IToolCallFilter {
public event Action<FunctionInvocationContext, TaskCompletionSource<bool>> ToolCalled;

Task<bool> InvokeFunctionFilter(FunctionInvocationContext context);
}

MyToolCallFilter管理AI触发的操作,并仅在获得批准时执行敏感操作。API设计允许过滤器暂停函数执行,等待用户输入,并根据用户的决定继续或取消,TaskCompletionSource实例支持UI和过滤器逻辑之间的异步通信。

public class MyToolCallFilter : IToolCallFilter {
public event Action<FunctionInvocationContext, TaskCompletionSource<bool>> ToolCalled;

public Task<bool> InvokeFunctionFilter(FunctionInvocationContext context) {
if (ToolCalled is null)
return Task.FromResult(true);

var tcs = new TaskCompletionSource<bool>();
ToolCalled.Invoke(context, tcs);
return tcs.Task;
}
}
确认工具调用(CustomFunctionInvokingChatClient)

CustomFunctionInvokingChatClient类扩展了DevExpress Blazor AI Chat控件的默认操作:

  • 拦截AI工具调用(定义一个自定义的FunctionInvoker委托)。
  • 检查确认逻辑(过滤器是否已在服务集合中注册)。
  • 在用户批准后进行。如果用户取消请求,CustomFunctionInvoker方法调用将返回取消消息,取代执行工具。该消息告诉LLM操作被中止,请求的信息不可用。
public class CustomFunctionInvokingChatClient : FunctionInvokingChatClient {
public CustomFunctionInvokingChatClient(IChatClient innerClient, ILoggerFactory? factory = null,
IServiceProvider? services = null)
: base(innerClient, factory, services) {
if(services == null) {
throw new ArgumentNullException(nameof(services), "Service provider cannot be null.");
}
FunctionInvoker = CustomFunctionInvoker;
}

private async ValueTask<object?> CustomFunctionInvoker(FunctionInvocationContext context,
CancellationToken cancellationToken) {
IToolCallFilter? filter = FunctionInvocationServices!.GetService<IToolCallFilter>();

if(await (filter?.InvokeFunctionFilter(context) ?? Task.FromResult(true))) {
return await context.Function.InvokeAsync(context.Arguments, cancellationToken);
}

return "The tool call was cancelled by the user. Do not attempt to invoke this tool again. Return a message indicating that the call was cancelled and that the weather information is unavailable at this time.";
}
}

未完待续,下期继续......

更多产品资讯及授权,欢迎来电咨询:023-68661681


更多DevExpress线上公开课、中文教程资讯请上中文网获取

关于慧都科技

慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。

慧都是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:慧都网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP