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

这篇文章剖析一下 CangjieMagic 框架中的 Agent 接口设计。

1 Agent 接口概述

首先让我们看看 agent.cj 这个文件定义了什么。这个文件位于 magic.core.agent 包中,定义了一个名为 Agent 的公共接口,代表智能代理的核心抽象。

Agent
+String name
+String description
+Option temperature
+String systemPrompt
+ToolManager toolManager
+ChatModel model
+AgentExecutor executor
+Option retriever
+Option memory
+Option interceptor
+chat(AgentRequest) : AgentResponse
+asyncChat(AgentRequest) : AsyncAgentResponse

2 属性详解

这个接口定义了智能代理需要包含的各种核心属性,就像我们人类需要名字、技能、记忆一样,AI Agent 也需要这些关键组件:

2.1 基本属性

  • 名称 (name): 每个代理都有自己的名字,就像我们每个人都有名字一样。
  • 描述 (description): 代理的功能说明,告诉用户这个代理能做什么。

2.2 思维控制

  • 温度值 (temperature): 这是控制 LLM 输出随机性的参数,就像调节人的思维发散程度。
    • Option<Float64> 表示这个属性是可选的,可以为空
    • 温度值越高,回答越随机创新;越低,回答越确定稳定

2.3 行为指导

  • 系统提示 (systemPrompt): 这就像是给代理的工作手册,定义了代理的角色和行为准则。

2.4 工具使用

  • 工具管理器 (toolManager): 代理可以使用的工具集合,就像人类使用工具扩展能力一样。
    • 工具可以是计算器、搜索引擎、代码执行器等

2.5 思维与执行

  • 聊天模型 (model): 代理使用的大语言模型,是代理的"大脑"。
  • 执行器 (executor): 代理的执行引擎,负责实际执行代理的决策过程。

2.6 知识获取

  • 检索器 (retriever): 可选的检索组件,允许代理从外部知识库获取信息。
    • 这就像人类可以查阅资料来增强自己的知识

2.7 记忆存储

  • 记忆 (memory): 可选的记忆组件,让代理能够记住过去的对话。
    • 这使得代理可以像人类一样,有上下文记忆

2.8 行为监控

  • 拦截器 (interceptor): 可选的拦截器,可以在代理执行过程中进行干预。
    • 这就像是代理的"自我监督"机制

3 代理的核心功能

Agent 接口定义了两个关键函数:

3.1 同步对话 (chat)

func chat(request: AgentRequest): AgentResponse

这个函数接收一个 AgentRequest 对象,返回一个 AgentResponse 对象。就像我们问一个问题,然后等待回答。

细看 AgentRequest,它包含:

  • 当前用户问题 (question)
  • 之前的对话历史 (dialog)
  • 是否输出详细执行信息的标志 (verbose)

AgentResponse 则包含:

  • 执行结果内容 (content)
  • 执行过程的内部信息 (execInfo)

3.2 异步对话 (asyncChat)

func asyncChat(request: AgentRequest): AsyncAgentResponse

这个函数提供了流式返回的能力,可以逐步看到回答生成的过程,而不必等待完整回答。

4 与执行器的关系

Agent 接口与 AgentExecutor 密切相关:

用户 Agent AgentExecutor ChatModel ToolManager chat(request) run(agent, request) 思考与决策 调用工具 返回结果 返回AgentResponse 用户 Agent AgentExecutor ChatModel ToolManager

AgentExecutor 接口定义了执行器的核心功能:

  • 同步执行 run 函数
  • 异步执行 asyncRun 函数

这种设计将决策逻辑与代理属性分离,符合单一职责原则。

5 生活中的类比

Agent 就像一位助手:

  • 名字和描述就是助手的身份信息
  • 温度值就像是助手的性格特点(严谨或创意)
  • 系统提示就像是给助手的工作手册
  • 工具管理器就像是助手可以使用的工具箱
  • 聊天模型就像是助手的大脑和思维方式
  • 执行器就像是助手的行动能力
  • 检索器就像是助手可以查阅的资料库
  • 记忆就像是助手记笔记的能力
  • 拦截器就像是助手的自我监督机制

6 实际应用案例

假设我们要创建一个客服助手,我们可以这样配置:

  • name: “客服小智”
  • description: “专业解答产品问题的AI助手”
  • temperature: 0.3(保持回答的确定性)
  • systemPrompt: “你是一位专业的客服代表,总是礼貌、准确地回答问题…”
  • toolManager: 配置产品查询、订单查询等工具
  • model: 选择适合客服场景的LLM
  • executor: 使用适合客服场景的执行策略
  • retriever: 连接到产品知识库
  • memory: 启用对话记忆,记住用户的问题历史
  • interceptor: 添加敏感信息过滤

这样配置的Agent就能像真正的客服一样工作,回答用户问题,查询信息,并保持对话的连贯性。

7 总结

仓颉语言的Agent接口设计非常全面,涵盖了构建智能代理所需的各个核心组件。通过这个设计,我们可以:

  1. 灵活配置代理的各种属性
  2. 控制代理的思维方式(温度值)
  3. 为代理赋予工具使用能力
  4. 实现同步和异步对话模式
  5. 让代理拥有记忆和知识检索能力
  6. 监控和干预代理的行为

这种模块化、灵活的设计,使得我们可以根据不同场景和需求,构建出各种功能强大的AI代理。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐