【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(6):拦截器

CangjieMagic框架:使用华为仓颉编程语言编写,专门用于开发AI Agent,支持鸿蒙、Windows、macOS、Linux等系统。

这篇文章剖析一下 CangjieMagic 框架中的 Interceptor。

1 Interceptor类的整体介绍

首先,让我们看一下interceptor.cj文件的整体结构。这个文件定义了Interceptor类,它位于magic.core.agent包中。这个类的主要作用是什么呢?简单来说,它就像是在Agent和用户之间设置的一个"关卡",可以根据不同的条件决定是否要拦截用户的请求。

2 类的成员变量分析

让我们来看看这个类有哪些成员变量:

  1. agent: Agent - 这是被拦截器包装的Agent对象
  2. mode: InterceptorMode - 拦截模式,决定何时拦截请求
  3. numOfBypass: Int - 记录已经跳过(未拦截)的请求数量

3 构造函数解析

public init(agent: Agent, mode!: InterceptorMode = InterceptorMode.Always) {
    this.agent = agent
    this.mode = mode
}

构造函数接收两个参数:

  • agent:被拦截的Agent对象
  • mode:拦截模式,默认为InterceptorMode.Always(总是拦截)

4 核心成员函数解析

4.1 shouldIntercept函数

protected func shouldIntercept(request: AgentRequest): Bool {
    match (mode) {
        case InterceptorMode.Always => return true
        case InterceptorMode.Periodic(freq) => return numOfBypass >= freq
        case InterceptorMode.Conditional(fn) => return fn(request)
    }
}

这个函数决定是否应该拦截请求,根据不同的模式有不同的判断逻辑:

  • Always模式:总是返回true,即总是拦截
  • Periodic模式:当跳过的请求数量达到指定频率(freq)时拦截
  • Conditional模式:使用传入的函数(fn)对请求进行评估,决定是否拦截

这就像交通警察,可以选择"总是拦车检查"、“每10辆车拦一辆"或者"看车的状态决定是否拦”。

4.2 doIntercept函数

protected func doIntercept(request: AgentRequest): AgentResponse {
    // Each time intercepting a request, the number of bypassed requests is reset
    numOfBypass = 0
    return agent.chat(request)
}

当决定拦截请求时,这个函数会被调用:

  1. 重置跳过请求的计数器
  2. 将请求转发给agent处理
  3. 返回agent的响应

4.3 doBypass函数

protected func doBypass(_request: AgentRequest) {
    numOfBypass += 1
}

当决定不拦截请求时,这个函数会被调用,它只是简单地增加跳过请求的计数。

5 实际应用场景

让我们来看几个实际应用的例子:

  1. 日志记录:可以使用Always模式拦截所有请求,记录用户与Agent的所有交互。
  2. 性能采样:使用Periodic模式,比如每10次请求采样一次,计算响应时间。
  3. 内容过滤:使用Conditional模式,检查用户输入是否包含敏感词,如果有则交给特殊的Agent处理。
  4. 负载均衡:根据系统负载动态决定是将请求发送给主Agent还是备用Agent。

6 拦截器的工作流程

我们可以用以下流程图来理解拦截器的工作方式:

用户发送请求
shouldIntercept?
doIntercept
doBypass
处理请求并返回响应
增加bypass计数
返回响应给用户

7 总结

Interceptor类是CangjieMagic框架中实现Agent请求拦截的核心类,它提供了灵活的拦截策略,可以根据不同的场景进行配置。通过拦截器,我们可以实现请求的过滤、转发、日志记录等功能,是构建复杂AI Agent系统的重要组件。

就像在我们的日常生活中,有时候你打电话给客服,可能会先经过一个智能机器人的筛选,然后再决定是直接回答你的问题,还是转接给人工客服。这个智能机器人就相当于我们这里的拦截器,它根据不同的规则决定如何处理你的请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值