【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(4):异步Agent响应

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

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

1 类的定义与继承关系

public class AsyncAgentResponse <: Iterator<String> {
    // 类的实现...
}

首先我们看到,AsyncAgentResponse类实现了Iterator<String>接口。这个设计非常巧妙,就像我们生活中的自来水管道一样,它允许数据像水流一样一点一点地流出来,而不是等到水池装满才一次性倒出。

2 核心成员变量分析

private let chunks: Iterator<String>
private let _content = StringBuilder()
public let execInfo: Option<AgentExecutionInfo>

这个类有三个关键成员变量:

  • chunks: 这是一个字符串迭代器,就像一卷正在慢慢展开的画卷,每次只显示一小部分内容。
  • _content: 一个StringBuilder对象,用来累积所有的内容片段,就像我们记笔记时,一点一点地积累成完整的笔记本。
  • execInfo: 包含执行信息的可选对象,它记录了Agent执行过程的上下文信息,就像导演手中的剧本,记录着演员该做什么。

3 构造函数解析

public init(chunks: Iterator<String>) {
    this.chunks = chunks
    this.execInfo = None
}

public init(chunks: Iterator<String>, execInfo!: AgentExecutionInfo) {
    this.chunks = chunks
    this.execInfo = execInfo
}

类提供了两个构造函数,这就像餐厅提供了标准套餐和豪华套餐两种选择:

  1. 基础版:只需提供内容块迭代器,执行信息为空
  2. 高级版:同时提供内容块迭代器和执行信息

4 属性访问器分析

public prop content: String {
    get() {
        // Consume all chunks
        for (_ in this) { }
        _content.toString()
    }
}

content属性的获取器做了一件事情:它会消费迭代器中的所有内容块(通过遍历自己),然后返回完整的内容字符串。

这个过程是同步的,会阻塞直到所有内容都获取完毕,注释中也特别强调了这一点。

5 迭代器函数实现

override public func next(): Option<String> {
    if (let Some(chunk) <- this.chunks.next()) {
        _content.append(chunk)
        return chunk
    } else {
        if (let Some(info) <- this.execInfo) {
            info.dialog.addMessage(ChatMessage.assistant(_content.toString()))
        }
        return None
    }
}

next()函数是实现Iterator接口的核心,它做了两件事:

  1. 当还有内容块时:

    • 获取下一个内容块
    • 将其添加到累积内容中
    • 返回该内容块
  2. 当没有更多内容时:

    • 如果有执行信息,则将累积的全部内容作为AI助手的消息添加到对话中
    • 返回None表示迭代结束

这就像一个讲故事的人,一段一段地讲述,当故事讲完后,还会把整个故事记录在笔记本中以便回顾。

6 使用场景示例

让我们用一个生活中的例子来理解这个类的用途:

想象你在使用一个AI写作助手,你要求它写一篇文章。传统方式可能需要等待几分钟才能看到完整文章。但使用AsyncAgentResponse,你可以看到AI一句一句地"写作",就像看着一个真人在你面前写作一样。

用户 Agent AsyncAgentResponse 用户界面 对话历史 请求生成内容 创建响应对象 返回下一个内容块 显示新增内容 loop [流式返回] 记录完整响应 用户 Agent AsyncAgentResponse 用户界面 对话历史

7 代码设计亮点

  1. 流式处理设计:通过实现Iterator接口,实现了内容的流式处理,提高了用户体验。
  2. 状态累积:在流式返回的同时,还在内部累积完整内容,兼顾了实时性和完整性。
  3. 优雅的对话集成:当迭代结束时,自动将内容添加到对话历史中,简化了开发者的工作。
  4. Option类型的使用:通过Option类型优雅地处理可能存在也可能不存在的执行信息。

8 小结

AsyncAgentResponse类是CangjieMagic框架中处理异步Agent响应的核心组件,它通过迭代器模式实现了内容的流式返回,同时保存完整响应用于对话历史记录。这种设计让AI Agent的响应更加自然流畅,就像人类之间的对话一样即时反馈,大大提升了用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值