跳到主要内容

Agents and Skills

在 AIGNE 生态系统中,Agents 和 Skills 是将您的 AI 应用程序变为现实的基本构建块。它们协同工作,创建复杂的、由工具增强的 AI 系统。您可以将 Agent 视为负责推理和对话的大脑,而将 Skills 视为其用于执行操作和与外部世界交互的工具。

本节介绍了这些核心组件的定义和结构。有关如何在项目中将它们连接在一起的详细信息,请参阅 项目配置 (aigne.yaml) 文档。

Agents

Agent 是处理用户输入、维护上下文并决定采取何种行动的核心组件。其行为由一组指令(其核心提示)及其有权访问的 Skills 集合来定义。

Agents 通常在 .yaml 文件中定义。

Agent 定义示例

这是一个聊天 Agent 的基本示例,它配备了代码执行 Skill。

chat.yaml

yaml
name: chat
description: 聊天 Agent
instructions: |
  你是一个乐于助人的助手,可以回答问题并提供关于广泛主题的信息。
  你的目标是帮助用户找到他们需要的信息,并进行友好的交谈。
input_key: message
memory: true
skills:
  - sandbox.js

Agent 属性

Agent 的行为通过其 YAML 定义文件中的几个关键属性进行配置:

属性类型描述
namestringAgent 的简短描述性名称。
descriptionstring对 Agent 用途的更详细解释。
instructionsstring定义 Agent 的个性、目标和约束的系统提示。这是其核心逻辑。
input_keystring输入对象中包含主要用户消息的属性名称(例如,message)。
memoryboolean如果为 true,Agent 将保留对话历史记录,从而支持后续问题和上下文。
skillsarrayAgent 有权使用的 Skill 文件列表(例如,sandbox.js)。

Skills

Skill 是一个可执行函数,通常用 JavaScript 编写,为 Agent 提供特定能力。这可以是任何事情,从运行代码、从 API 获取数据,到与文件系统交互。Skills 是大型语言模型推理与具体任务执行之间的桥梁。

Skill 定义示例

Skills 是标准的 Node.js 模块,导出一个默认的异步函数。关键的是,它们还导出描述其用途并定义其输入/输出结构的元数据,从而使 Agent 能够理解如何以及何时使用它们。

sandbox.js

javascript
import vm from "node:vm";

export default async function evaluateJs({ code }) {
  const sandbox = {};
  const context = vm.createContext(sandbox);
  const result = vm.runInContext(code, context, { displayErrors: true });
  return { result };
}

evaluateJs.description = "此 Skill 评估 JavaScript 代码。";

evaluateJs.input_schema = {
  type: "object",
  properties: {
    code: { type: "string", description: "要评估的 JavaScript 代码" },
  },
  required: ["code"],
};

evaluateJs.output_schema = {
  type: "object",
  properties: {
    result: { type: "any", description: "评估代码的结果" },
  },
  required: ["result"],
};

Skill 结构

一个 Skill 文件由三个主要部分组成:

  1. 默认导出的函数

    Skill 的核心逻辑。它是一个 async 函数,接收一个参数对象并返回一个结果。

  2. `description`

    附加到函数上的字符串属性,提供关于 Skill 功能的自然语言描述。Agent 的底层 LLM 使用此描述来确定何时调用此 Skill 是合适的。

  3. `input_schema`

    / output_schema:JSON Schema 对象,用于定义函数输入和输出的预期结构和类型。这确保了 Agent 提供有效的参数并能正确解释结果。

它们如何协同工作

用户、Agent 和 Skill 之间的交互遵循一个清晰的模式。Agent 充当智能协调器,解释用户的请求并调用适当的 Skill 来完成它。

d2
direction: down

User: {
  shape: c4-person
}

AIGNE-Runtime: {
  label: "AIGNE 运行时"
  shape: rectangle

  Chat-Agent: {
    label: "聊天 Agent"
  }

  Sandbox-Skill: {
    label: "沙盒 Skill (sandbox.js)"
  }
}

User -> AIGNE-Runtime.Chat-Agent: "1. 输入:'5 + 7 是多少?'"
AIGNE-Runtime.Chat-Agent -> AIGNE-Runtime.Chat-Agent: "2. LLM 推理出需要进行计算"
AIGNE-Runtime.Chat-Agent -> AIGNE-Runtime.Sandbox-Skill: "3. 使用 { code: '5 + 7' } 调用 Skill"
AIGNE-Runtime.Sandbox-Skill -> AIGNE-Runtime.Sandbox-Skill: "4. 在沙盒中执行代码"
AIGNE-Runtime.Sandbox-Skill -> AIGNE-Runtime.Chat-Agent: "5. 返回 { result: 12 }"
AIGNE-Runtime.Chat-Agent -> User: "6. 形成响应:'结果是 12。'"

通过将推理(Agent)与执行(Skill)分离,您可以构建功能强大且可扩展的 AI 系统,这些系统易于维护和升级。

后续步骤

现在您已经了解了 Agents 和 Skills 的核心概念,可以继续阅读以下部分: