阿里云开源 Assistant Agent:快速构建答疑、诊断智能助手

阿里云开源 Assistant Agent,助力开发者快速构建智能答疑、诊断助手。代码即行动,赋能企业级应用。

原文标题:阿里 Assistant Agent 开源,助力开发者快速构建答疑、诊断智能助手

原文作者:阿里云开发者

冷月清谈:

阿里云开源了 Assistant Agent,这是一个基于 Spring AI Alibaba 的企业级智能助手框架,旨在帮助开发者快速构建智能答疑客服、系统诊断、运维助手等智能应用。它采用代码即行动(Code-as-Action)范式,通过生成和执行代码来编排工具、完成任务,具备安全沙箱、多维评估、Prompt 动态组装、经验学习和快速响应等技术特性。Assistant Agent 提供了智能问答、工具调用、主动服务和多渠道触达等核心能力,并详细介绍了其项目结构、快速启动步骤、核心模块(评估、Prompt Builder、学习、经验、触发器、回复渠道、工具扩展和知识检索模块)和各个模块的核心能力与使用方法,为开发者提供了一个全面而强大的智能助手构建方案。

怜星夜思:

1、Assistant Agent 采用的“代码即行动”范式相比于传统的工具调用方式,有哪些优势和局限性?
2、文章提到了 Assistant Agent 的经验学习模块,那么在实际应用中,Agent 如何判断哪些经验是“有价值的”,并避免学习到错误的经验?
3、Assistant Agent 支持多渠道触达,那么在不同的渠道(例如 IDE、钉钉、飞书)中,如何保证用户体验的一致性?

原文内容

更多具体定制接入与使用方式,可加入文末微信与钉钉群,与官方维护团队取得联系。

简介

Assistant Agent 是一个基于 Spring AI Alibaba 构建的企业级智能助手框架,采用代码即行动(Code-as-Action)范式,通过生成和执行代码来编排工具、完成任务。它是一个能理解、能行动、能学习的智能助手解决方案,可帮助企业快速构建智能答疑客服、系统诊断、运维助手、业务助理、AIOps 等智能体。

仓库地址:spring-ai-alibaba/AssistantAgent

https://github.com/spring-ai-alibaba/AssistantAgent

技术特性

  • 代码即行动(Code-as-Action)Agent 通过生成并执行代码来完成任务,而非仅仅调用预定义工具,可以在代码中灵活编排、组合多个工具,实现复杂流程;
  • 安全沙箱AI 生成的代码在 GraalVM 多语言沙箱中安全运行,具备资源隔离能力;
  • 多维评估通过评估图(Graph)进行多层次意图识别,精准指导 Agent 行为;
  • Prompt 动态组装根据场景及前置评估结果动态注入上下文(经验、知识等)到 Prompt 中,灵活处理不同任务;
  • 经验学习自动积累成功经验,持续提升后续任务的表现;
  • 快速响应熟悉场景下,跳过 LLM 推理过程,基于经验快速响应;

Assistant Agent 能帮你做什么?

Assistant Agent 是一个功能完整的智能助手,具备以下核心能力:

  • 智能问答支持多数据源统一检索架构(通过 SPI 可扩展知识库、Web 等数据源),提供准确、可溯源的答案;
  • 工具调用支持 MCP、HTTP API(OpenAPI)等协议,灵活接入海量工具,可组合调用实现复杂业务流程;
  • 主动服务支持定时任务、延迟执行、事件回调,让助手主动为你服务;
  • 多渠道触达内置 IDE 回复,允许通过 SPI 可扩展钉钉、飞书、企微、Webhook 等渠道;

为什么选择 Assistant Agent?

适用场景

  • 智能客服接入企业知识库,智能解答用户咨询;
  • 运维助手对接监控、工单系统,自动处理告警、查询状态、执行操作;
  • 业务助理连接 CRM、ERP 等业务系统,辅助员工完成日常工作;

以上仅为典型场景示例。通过配置知识库和接入工具,Assistant Agent 可适配更多业务场景,欢迎探索。


整体工作原理

以下是 Assistant Agent 处理一个完整请求的端到端流程示例:

项目结构

assistant-agent/
├── assistant-agent-common          # 通用工具、枚举、常量
├── assistant-agent-core            # 核心引擎:GraalVM 执行器、工具注册表
├── assistant-agent-extensions      # 扩展模块:
│   ├── dynamic/               #   - 动态工具(MCP、HTTP API)
│   ├── experience/            #   - 经验管理与快速意图配置
│   ├── learning/              #   - 学习提取与存储
│   ├── search/                #   - 统一搜索能力
│   ├── reply/                 #   - 多渠道回复
│   ├── trigger/               #   - 触发器机制
│   └── evaluation/            #   - 评估集成
├── assistant-agent-prompt-builder  # Prompt 动态组装
├── assistant-agent-evaluation      # 评估引擎
├── assistant-agent-autoconfigure   # Spring Boot 自动配置
└── assistant-agent-start           # 启动模块

快速启动

前置要求

  • Java 17+
  • Maven 3.8+
  • DashScope API Key
1. 克隆并构建
git clone https://github.com/spring-ai-alibaba/AssistantAgent
cd assistant-agent
mvn clean install -DskipTests
2. 配置 API Key
export DASHSCOPE_API_KEY=your-api-key-here
3. 最小配置

项目已内置默认配置,只需确保 API Key 正确即可。如需自定义,可编辑 assistant-agent-start/src/main/resources/application.yml

spring:
  ai:
    dashscope:
      api-key: ${DASHSCOPE_API_KEY}
      chat:
        options:
          model: qwen-max
4. 启动应用
cd assistant-agent-start
mvn spring-boot:run

所有扩展模块默认开启并采用合理的配置,无需额外配置即可快速启动。

5. 配置知识库(接入业务知识)

💡 框架默认提供 Mock 知识库实现用于演示测试。生产环境需要接入真实知识源(如向量数据库、Elasticsearch、企业知识库 API 等),以便 Agent 能够检索并回答业务相关问题。

方式一:快速体验(使用内置 Mock 实现)

默认配置已启用知识库搜索,可直接体验:

spring:
  ai:
    alibaba:
      codeact:
        extension:
          search:
            enabled: true
            knowledge-search-enabled: true  # 默认开启
方式二:接入真实知识库(推荐)

实现 SearchProvider SPI 接口,接入你的业务知识源:

package com.example.knowledge;

import com.alibaba.assistant.agent.extension.search.spi.SearchProvider;
import com.alibaba.assistant.agent.extension.search.model.;
import org.springframework.stereotype.Component;
import java.util.
;

@Component  // 添加此注解,Provider 会自动注册
publicclassMyKnowledgeSearchProviderimplementsSearchProvider {

    @Override
    public boolean supports(SearchSourceType type){
        return SearchSourceType.KNOWLEDGE == type;
    }

    @Override
    public List<SearchResultItem> search(SearchRequest request){
        List<SearchResultItem> results = new ArrayList<>();
        
        // 1. 从你的知识源查询(向量数据库、ES、API 等)
        // 示例:List<Doc> docs = vectorStore.similaritySearch(request.getQuery());
        
        // 2. 转换为 SearchResultItem
        // for (Doc doc : docs) {
        //     SearchResultItem item = new SearchResultItem();
        //     item.setId(doc.getId());
        //     item.setSourceType(SearchSourceType.KNOWLEDGE);
        //     item.setTitle(doc.getTitle());
        //     item.setSnippet(doc.getSummary());
        //     item.setContent(doc.getContent());
        //     item.setScore(doc.getScore());
        //     results.add(item);
        // }
        
        return results;
    }

    @Override
    public String getName(){
        return"MyKnowledgeSearchProvider";
    }
}

常见知识源接入示例

核心模块介绍

评估模块(Evaluation)

作用多维度意图识别框架,通过评估图(Graph)对信息进行多层次特质识别。

┌──────────────────────────────────────────────────────────────────┐
│                    评估图 (Evaluation Graph) 示例                  │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│  用户输入: "查询今日订单"                                           │
│          │                                                       │
│          ▼                                                       │
│  ┌─────────────────────────────────────────────────────────┐     │
│  │ Layer 1 (并行执行)                                      │     │
│  │   ┌────────────┐         ┌────────────┐                 │     │
│  │   │ 是否模糊?   │         │ 输入改写     │                 │     │
│  │   │ 清晰/模糊   │         │(增强)      │                 │     │
│  │   └─────┬──────┘         └─────┬──────┘                 │     │
│  └─────────┼──────────────────────┼────────────────────────┘     │
│            │                      │                              │
│            └──────────┬───────────┘                              │
│                       ▼                                          │
│  ┌─────────────────────────────────────────────────────────┐     │
│  │ Layer 2 (基于改写内容,并行执行)                            │     │
│  │   ┌──────────┐   ┌──────────┐   ┌──────────┐            │     │
│  │   │ 检索经验  │   │ 匹配工具  │   │ 搜索知识  │             │     │
│  │   │ 有/无    │   │ 有/无     │   │ 有/无    │             │     │
│  │   └──────────┘   └──────────┘   └──────────┘            │     │
│  └─────────────────────────────────────────────────────────┘     │
│                       │                                          │
│                       ▼                                          │
│            ┌────────────────────┐                                │
│            │ 整合不同维度评估结果  │                                │
│            │ → 传递给后续模块     │                                │
│            └────────────────────┘                                │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

核心能力

  • 双评估引擎
  • LLM 评估通过大模型进行复杂语义判断,用户可完全自定义评估 Prompt(customPrompt),也可使用默认 Prompt 组装(支持 descriptionworkingMechanismfewShots 等配置);
  • Rule-based 评估通过 Java 函数实现规则逻辑,用户自定义 Function<CriterionExecutionContext, CriterionResult> 执行任意规则判断,适合阈值检测、格式校验、精确匹配等场景;
  • 依赖关系自定义评估项可通过 dependsOn 声明前置依赖,系统自动构建评估图按拓扑执行,无依赖项并行、有依赖项顺序执行,后续评估项可访问前置评估项的结果;
  • 评估结果支持 BOOLEANENUMSCOREJSONTEXT 等类型,传递给 Prompt Builder 驱动动态组装;

Prompt Builder 模块

作用根据评估结果和运行时上下文,动态组装发送给模型的 Prompt。示例:

┌─────────────────────────────────────────────────────────────────────────┐
│                   Prompt Builder - 条件化动态生成                         │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  评估结果输入:                                                            │
│  ┌────────────────────────────────────────────────────────┐             │
│  │ 模糊: 是  │ 经验: 有  │ 工具: 有  │ 知识: 无               │             │
│  └────────────────────────────────────────────────────────┘             │
│                    │                                                    │
│                    ▼                                                    │
│  ┌────────────────────────────────────────────────────────────────┐     │
│  │              自定义 PromptBuilder 条件匹配                       │     │
│  │                                                                │     │
│  │   模糊=是 ──────▶ 注入 [澄清引导 Prompt]                          │     │
│  │   模糊=否 ──────▶ 注入 [直接执行 Prompt]                          │     │
│  │                                                                │     │
│  │   经验=有 ──────▶ 注入 [历史经验参考]                              │     │
│  │   工具=有 ──────▶ 注入 [工具使用说明]                              │     │
│  │   知识=有 ──────▶ 注入 [相关知识片段]                              │     │
│  │                                                                │     │
│  │   组合示例1: 模糊+无工具+无知识 ──▶ [追问用户 Prompt]               │     │
│  │   组合示例2: 清晰+有工具+有经验 ──▶ [快速执行 Prompt]               │     │
│  └────────────────────────────────────────────────────────────────┘     │
│                    │                                                    │
│                    ▼                                                    │
│  ┌────────────────────────────────────────────────────────────────┐     │
│  │ 最终动态 Prompt:                                                │     │
│  │ [系统提示] + [澄清引导] + [历史经验] + [工具说明] + [用户问题]        │     │
│  └────────────────────────────────────────────────────────────────┘     │
│                    │                                                    │
│                    ▼                                                    │
│              ┌──────────┐                                               │
│              │   模型    │                                               │
│              └──────────┘                                               │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

核心能力

  • 多个 PromptBuilder 按优先级顺序执行
  • 每个 Builder 根据评估结果决定是否贡献、贡献什么内容
  • 支持自定义 Builder,根据业务需求定制 Prompt 逻辑
  • 非侵入式,在模型调用层拦截

对比传统方案

学习模块(Learning)

作用从 Agent 执行历史中自动提取并保存有价值的经验。

┌─────────────────────────────────────────────────────────────────────────┐
│                         学习模块工作流程                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌────────────────────────────────────────────────────────────────────┐ │
│  │                        Agent 执行过程                               │ │
│  │                                                                    │ │
│  │  输入 ──▶ 推理 ──▶ 代码生成 ──▶ 执行 ──▶ 输出                          │ │
│  │   │        │          │         │        │                         │ │
│  │   └────────┴──────────┴─────────┴────────┘                         │ │
│  │                        │                                           │ │
│  └────────────────────────┼───────────────────────────────────────────┘ │
│                           ▼                                             │
│              ┌────────────────────────┐                                 │
│              │      学习上下文捕获      │                                 │
│              │  - 用户输入             │                                 │
│              │  - 中间推理步骤          │                                │
│              │  - 生成的代码           │                                 │
│              │  - 执行结果             │                                │
│              └───────────┬────────────┘                                │
│                          │                                             │
│                          ▼                                             │
│   ┌──────────────────────────────────────────────────────────────┐     │
│   │                    学习提取器分析                              │     │
│   │  ┌────────────┐  ┌────────────┐  ┌────────────┐              │     │
│   │  │ 经验提取器  │  │ 模式提取器   │  │ 错误提取器   │              │     │
│   │  │ 成功模式    │  │ 通用模式    │  │ 失败教训     │              │     │
│   │  └─────┬──────┘  └─────┬──────┘  └─────┬──────┘              │     │
│   └────────┼───────────────┼───────────────┼─────────────────────┘     │
│            │               │               │                           │
│            └───────────────┼───────────────┘                           │
│                            ▼                                           │
│                   ┌────────────────┐                                   │
│                   │   持久化存储    │ ──▶ 供后续任务参考使用                │
│                   └────────────────┘                                   │
│                                                                        │
└────────────────────────────────────────────────────────────────────────┘

核心能力

  • After-Agent 学习每次 Agent 运行完成后提取经验;
  • After-Model 学习每次模型调用后提取经验;
  • Tool Interceptor从工具调用中提取经验;
  • 离线学习批量分析历史数据提取模式;
  • 学习过程捕获执行上下文 → 提取器分析识别 → 生成经验记录 → 持久化存储供后续复用;

经验模块(Experience)

作用积累和复用历史成功执行经验。

┌─────────────────────────────────────────────────────────────────────────┐
│                         经验模块工作示意                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  【场景1: 经验积累】                                                       │
│                                                                         │
│   用户: "查询订单状态"  ──▶  Agent 成功执行  ──▶     ┌────────────────┐     │
│                                                  │ 保存经验:       │     │
│                                                  │ - React决策经验 │     │
│                                                  │ - Code经验     │     │
│                                                  │ - 常识经验      │     │
│                                                  └────────────────┘     │
│                                                           │             │
│                                                           ▼             │
│                                                  ┌────────────────┐     │
│                                                  │   经验库        │     │
│                                                  └────────────────┘     │
│                                                                         │
│  【场景2: 经验复用】                                       |              │
│                                                          │              │
│   用户: "查询我的订单状态"  ◀────  匹配相似经验  ◀────────────┘              │
│            │                                                            │
│            ▼                                                            │
│   ┌─────────────────────────────────────────────────┐                   │
│   │ Agent 参考历史经验,更快决策+生成正确代码             │                   │
│   └─────────────────────────────────────────────────┘                   │
│                                                                         │
│  【场景3: 快速意图响应】                                                   │
│                                                                         │
│   ┌─────────────────────────────────────────────────────────────────┐   │
│   │ 经验库                                                           │   │
│   │   ┌─────────────────────┐       ┌────────────────────────────┐  │   │
│   │   │ 经验A (普通)         │       │ 经验B (✓ 已配置快速意图)      │  │   │
│   │   │ 无快速意图配置        │       │   条件: 前缀匹配"查看*销量"   │  │   │
│   │   │ → 注入prompt供llm参考│       │   动作: 调用销量查询API       │  │   │
│   │   └─────────────────────┘       └───────────┬────────────────┘  │   │
│   └─────────────────────────────────────────────┼───────────────────┘   │
│                                                 │ 条件命中               │
│                                                 ▼                       │
│   用户: "查看今日销量"  ──▶  匹配经验B快速意图  ──▶  跳过LLM,直接执行          │
│                                                                         │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

核心能力

  • 多类型经验代码生成经验、ReAct 决策经验、常识经验,为类似任务提供历史参考;
  • 灵活复用经验可注入 Prompt 或用于快速意图匹配;
  • 生命周期管理支持经验的创建、更新、删除;
  • 快速意图响应
  • 经验需显式配置 fastIntentConfig 才能启用;
  • 匹配已配置条件时,跳过 LLM 完整推理,直接执行预记录的工具调用或代码;
  • 支持多条件匹配:消息前缀、正则、元数据、状态等;

触发器模块(Trigger)

作用创建和管理定时任务或事件触发的 Agent 执行。

┌─────────────────────────────────────────────────────────────────────────┐
│                         触发器模块能力示意                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  【定时触发】                                                             │
│                                                                         │
│   用户: "每天早上9点给我发送销售日报"                                        │
│            │                                                            │
│            ▼                                                            │
│   ┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐   │
│   │  Agent 创建      │     │   调度器         │     │  自动执行        │   │
│   │  Cron 触发器     │────▶│  09 * * *      │────▶│  生成日报        │   │
│   │  (自我调度)      │     │                 │     │  发送通知        │    │
│   └─────────────────┘     └─────────────────┘     └─────────────────┘   │
│                                                                         │
│  【延迟触发】                                                             │
│                                                                         │
│   用户: "30分钟后提醒我开会"                                               │
│            │                                                            │
│            ▼                                                            │
│   ┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐   │
│   │  Agent 创建      │     │   30分钟后      │     │  发送提醒         │   │
│   │  一次性触发器     │────▶│   触发          │────▶│  "该开会了"       │   │
│   └─────────────────┘     └─────────────────┘     └─────────────────┘   │
│                                                                         │
│  【回调触发】                                                             │
│                                                                         │
│   用户: "满足xx条件时帮我xx"                                               │
│                                                                         │
│   外部系统: 发送事件到 Webhook                                             │
│            │                                                            │
│            ▼                                                            │
│   ┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐   │
│   │  接收回调        │     │   触发 Agent     │     │  处理事件        │   │
│   │  Webhook 事件   │────▶│   执行任务        │────▶│  返回响应        │   │
│   └─────────────────┘     └─────────────────┘     └─────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

核心能力

  • TIME_CRON触发器:支持 Cron 表达式定时触发任务;
  • TIME_ONCE触发器:支持一次性延迟触发;
  • CALLBACK触发器:支持回调事件触发;
  • Agent 可通过工具自主创建触发器,实现"自我调度";

回复渠道模块(Reply Channel)

作用提供灵活的消息回复能力,支持多种输出渠道。

┌─────────────────────────────────────────────────────────────────────────┐
│                       回复渠道模块能力示意                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│   Agent 需要向用户回复消息                                                 │
│            │                                                            │
│            ▼                                                            │
│   ┌─────────────────────────────────────────────────────────────────┐   │
│   │                    回复渠道路由                                   │   │
│   └─────────────────────────────────────────────────────────────────┘   │
│            │                                                            │
│            ├──────────────┬──────────────┬──────────────┐               │
│            ▼              ▼              ▼              ▼               │
│   ┌────────────┐  ┌────────────┐  ┌────────────┐  ┌────────────┐        │
│   │  DEFAULT   │  │  IDE_CARD  │  │ IM_NOTIFY  │  │  WEBHOOK   │        │
│   │  文本回复   │  │  卡片展示   │   │  消息推送   │  │  JSON推送   │        │
│   └─────┬──────┘  └─────┬──────┘  └─────┬──────┘  └─────┬──────┘        │
│         │               │               │               │               │
│         ▼               ▼               ▼               ▼               │
│   ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐          │
│   │ 控制台    │    │   IDE    │    │   IM     │    │ 第三方    │          │
│   │ 终端回复  │    │ 富文本卡片 │     │ (可扩展) │    │  系统     │          │
│   └──────────┘    └──────────┘    └──────────┘    └──────────┘          │
│                                                                         │
│  【使用示例】                                                             │
│                                                                         │
│   用户: "分析完成后发送结果"                                                │
│            │                                                            │
│            ▼                                                            │
│   Agent: send_message(text="分析结果...")                                │
│            │                                                            │
│            ▼                                                            │
│   用户收到消息: "📊 分析结果: ..."                                         │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

核心能力

  • 多渠道路由Agent 可根据场景选择不同渠道回复;
  • 配置驱动动态生成回复工具,无需编码;
  • 同步异步支持支持同步和异步回复模式;
  • 统一接口屏蔽底层实现差异;
  • 内置示例渠道IDE_TEXT(演示用);
  • 可扩展渠道(通过实现 ReplyChannelDefinition SPI):如 IDE_CARDIM_NOTIFICATION
    (钉钉/飞书/企微)、WEBHOOK_JSON 等,需用户自行实现

工具扩展模块(Dynamic Tools)

作用提供高度可扩展的工具体系,让 Agent 能够调用各类外部工具完成任务。

┌─────────────────────────────────────────────────────────────────────────┐
│                        工具扩展架构                                       │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│   Agent 需要执行操作                                                      │
│            │                                                            │
│            ▼                                                            │
│   ┌──────────────────────────────────────────────────────────────────┐  │
│   │                   CodeactTool 工具体系                            │  │
│   └─────────────────────────────────────────────────────────────────┘   │
│            │                                                            │
│            ├─────────────┬─────────────┬─────────────┬──────────────┐   │
│            ▼             ▼             ▼             ▼              ▼   │
│   ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌───────┐ │
│   │   MCP      │ │   HTTP     │ │  Search    │ │  Trigger   │ │ 自定义 │ │
│   │   Tools    │ │   API      │ │  Tools     │ │  Tools     │ │ Tools │ │
│   │            │ │   Tools    │ │            │ │            │ │       │ │
│   └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └───┬───┘ │
│         │              │              │              │            │     │
│         ▼              ▼              ▼              ▼            ▼     │
│   ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐  ┌──────┐   │
│   │ 任意 MCP │   │ REST API │   │ 知识检索   │   │ 定时任务  │  │ ...  │   │
│   │ Server   │   │ OpenAPI  │   │ 项目搜索  │   │ 事件回调  │  │      │    │
│   └──────────┘   └──────────┘   └──────────┘   └──────────┘  └──────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

核心能力

  • MCP 工具支持一键接入任意 MCP Server,复用 MCP 工具生态;
  • HTTP API 支持通过 OpenAPI 规范接入 REST API,调用企业现有接口;
  • 内置工具类型搜索(Search)、回复(Reply)、触发器(Trigger)、学习(Learning)等;
  • 自定义工具 SPI实现 CodeactTool 接口,轻松扩展新工具;

知识检索模块(Knowledge Search)

作用多数据源统一检索引擎,为 Agent 的问答和决策提供知识支撑。

┌─────────────────────────────────────────────────────────────────────────┐
│                       多数据源检索架构                                     │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  用户问题: "如何配置数据库连接池?"                                          │
│            │                                                            │
│            ▼                                                            │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │                      统一检索接口                                 │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│            │                                                            │
│            ├────────────────┬────────────────┬────────────────┐         │
│            ▼                ▼                ▼                ▼         │
│   ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌─────────┐     │
│   │    知识库     │  │    项目       │  │     Web      │  │  自定义  │    │
│   │   Provider   │  │   Provider   │  │   Provider   │  │Provider │    │
│   │   (主要)      │  │   (可选)     │  │   (可选)      │  │  (SPI)  │    │
│   └──────┬───────┘  └──────┬───────┘  └──────┬───────┘  └───┬─────┘    │
│          │                 │                 │              │          │
│          ▼                 ▼                 ▼              ▼          │
│   ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌────────┐      │
│   │ FAQ / 文档    │  │ 源代码       │  │ 网络文章       │  │  ...   │      │
│   │ 历史问答      │  │ 配置文件      │  │ 技术论坛       │  │        │      │
│   │ 团队笔记      │  │ 日志         │  │               │  │        │      │
│   └──────────────┘  └─────────────┘  └───────────────┘  └────────┘      │
│          │                 │                 │              │          │
│          └─────────────────┴─────────────────┴──────────────┘          │
│                            │                                           │
│                            ▼                                           │
│               ┌────────────────────────┐                               │
│               │ 聚合排序                │                               │
│               │ → 注入 Prompt          │                                │
│               └────────────────────────┘                               │
│                                                                        │
└────────────────────────────────────────────────────────────────────────┘

核心能力

  • 统一检索接口SearchProvider SPI,支持可插拔数据源;
  • 演示 Provider内置知识库、项目、Web 的 Mock 实现(仅供演示和测试);
  • 自定义扩展通过实现 SearchProvider 接口,接入任意数据源(数据库、向量库、API);
  • 结果聚合支持可配置的排序策略;
  • 业务价值接入企业知识库提供准确答案、支持答案溯源、降低人工客服压力;

配置示例

spring:
  ai:
    alibaba:
      codeact:
        extension:
          search:
            enabled: true
            knowledge-search-enabled: true   # 知识库(默认 Mock 实现)
            project-search-enabled: false    # 项目代码(默认 Mock 实现)
            web-search-enabled: false        # Web 搜索(默认 Mock 实现)
            default-top-k: 5
            search-timeout-ms: 5000

💡 以上搜索功能默认提供 Mock 实现供演示测试。生产环境需实现 SearchProvider SPI 接入实际数据源。

致谢

  • Spring AI:https://github.com/spring-projects/spring-ai
  • Spring AI Alibaba:https://github.com/alibaba/spring-ai-alibaba
  • GraalVM:https://www.graalvm.org/

联系方式

  • 搜索加入钉钉群:130240015687
  • 扫码加入微信群(如二维码过期请加钉钉群)

Assistant Agent 的学习模块和经验模块,在我看来,就像是给 Agent 安装了一个“自动驾驶系统”。它可以通过不断学习和积累经验,让 Agent 在各种复杂场景下都能游刃有余地完成任务。

学习模块,负责从 Agent 的执行历史中提取有价值的信息,例如成功的案例、失败的教训、常见的模式等等。这些信息就像是“路况信息”,可以帮助 Agent 更好地了解周围的环境。

经验模块,则负责将这些信息转化为可执行的策略,例如如何选择合适的工具、如何制定有效的行动计划等等。这些策略就像是“驾驶规则”,可以指导 Agent 在不同的路况下采取正确的行动。

但是,这种“自动驾驶系统”也面临着一些挑战:

* 数据偏差:如果 Agent 的训练数据只包含特定场景下的信息,那么它可能会在新场景下表现不佳。
* 知识遗忘:Agent 可能会忘记过去学习到的知识,导致性能下降。
* 探索与利用的平衡:Agent 需要在利用现有知识和探索新知识之间找到平衡点,才能不断进步。

为了应对这些挑战,我的建议是:

1. 多样化的训练数据:尽量收集各种场景下的数据,让 Agent 接触到更全面的信息。
2. 持续学习:定期让 Agent 学习新的数据,保持知识的更新。
3. 探索与利用策略:采用合适的探索与利用策略,例如 epsilon-greedy 算法、UCB 算法等等,鼓励 Agent 在探索新知识的同时,也能充分利用现有知识。
4. 定期评估与监控:定期评估 Agent 的性能,并进行监控,及时发现和解决问题。

总而言之,学习模块和经验模块是 Agent 实现持续学习和进化的关键。通过不断学习和积累经验,Agent 可以变得越来越智能,越来越高效。

评估模块是 Assistant Agent 的核心组成部分,其目的是为了更好地理解用户的意图。为了应对用户输入的多样性和模糊性,以及纠正和优化评估偏差,可以考虑以下几个方面:

应对多样性和模糊性:

1. 多维度特征提取:从用户输入中提取多种特征,例如关键词、词性、句法结构、语义信息等。这些特征可以帮助评估模块更全面地理解用户意图。
2. 知识图谱:构建知识图谱,将领域知识融入到评估过程中。知识图谱可以帮助评估模块理解用户输入中的隐含信息,提高评估的准确性。
3. Prompt 工程:设计高质量的 Prompt,引导 LLM 进行更准确的意图识别。Prompt 可以包括任务描述、示例、约束条件等。
4. Few-shot Learning:利用少量示例数据,让 LLM 快速学习新的意图识别任务。这可以减少对大量标注数据的依赖。

纠正和优化评估偏差:

1. 监控评估指标:监控评估模块的各项指标,例如准确率、召回率、F1 值等。当指标出现异常时,及时进行调查和处理。
2. Error Analysis:对评估错误的样本进行分析,找出错误的原因。这可以帮助开发者更好地理解评估模块的不足之处。
3. 数据增强:通过数据增强技术,扩充训练数据集,提高评估模块的泛化能力。数据增强技术可以包括同义词替换、句子改写、随机噪声等。
4. 在线学习:利用用户的实时反馈,对评估模块进行在线学习。当用户对评估结果不满意时,可以提供反馈信息,帮助评估模块改进。

多渠道回复这块,我理解为“见人说人话,见鬼说鬼话”,也就是要根据不同的对象,采用不同的沟通方式。

* 跟程序员,可以直接甩代码、丢链接,他们看得懂。
* 跟老板,要用数据说话,突出 ROI,让他们觉得物有所值。
* 跟普通用户,要简单易懂,避免使用专业术语。

我的建议是,可以建立一个**“回复模板库”,针对不同的渠道和对象,提供不同的回复模板。这样,Agent 就可以根据实际情况,选择合适的模板进行回复。

另外,还可以引入
“用户反馈机制”**,让用户对 Agent 的回复进行评价。如果用户觉得回复不满意,可以提供反馈信息,帮助 Agent 改进回复质量。

总的来说,多渠道回复的优化需要不断地尝试和改进,需要根据用户的反馈,不断地调整回复策略。

这就像人一样,老是按照过去的经验办事,容易变得保守。Agent 也一样,需要不断地学习新的东西,才能保持活力。我觉得可以加入一些随机性,让 Agent 偶尔尝试一些不同的方法,说不定会有惊喜。另外,要定期更新知识库,避免 Agent 学习到过时的信息。

代码即行动的优势在于高度的灵活性和可组合性,能够处理更复杂的、未预料到的任务。劣势在于可能引入安全风险,需要有效的沙箱机制来保障。传统的预定义工具调用方式更安全可控,但灵活性较差。选择哪种方式取决于对安全性和灵活性的权衡。我认为,对于已知且风险可控的任务,预定义工具更合适;对于探索性、需要灵活编排的任务,代码即行动更具优势。

个人理解,Code-as-Action 最大的优势在于灵活性和可扩展性。传统方式依赖于预定义的工具,遇到新需求可能就要重新开发工具,但 Code-as-Action 可以通过生成代码动态组合现有工具,快速应对变化。但与此同时,这种方式对 Agent 的代码生成能力要求更高,也可能引入安全风险,需要有完善的安全沙箱机制。

我觉得在教育领域很有潜力。比如可以做成个性化学习助手,根据学生的学习情况动态调整学习计划,或者提供针对性的答疑辅导。而且 Agent 的经验学习能力也能不断提升教学质量。

这就像是问盖房子,砖头、设计图、地基哪个最重要。当然是都要!代码生成经验是砖头,决定了你盖房子的速度;ReAct 决策经验是设计图,决定了你房子盖得是否合理;常识经验是地基,决定了你房子是否稳固。要我说,都重要,缺一不可!

从学术角度来看,“代码即行动”范式本质上是将 Agent 的决策空间扩展到了代码层面。优势在于它提升了 Agent 的泛化能力和解决复杂问题的能力,因为 Agent 不再受限于预定义工具的组合,而是可以根据需要生成任意代码来完成任务。然而,这种范式也引入了新的挑战,例如代码的正确性验证、安全风险控制以及计算资源的消耗等。因此,在实际应用中需要权衡其优势和局限性。

想象一下,有了这些触发器,你的智能助手能做的事情就多了!比如,你可以设置一个定时触发器,每天早上自动帮你查询天气预报,然后推送给你;或者设置一个延迟触发器,在你离开电脑一个小时后提醒你起来活动一下;还可以设置一个回调触发器,当你的股票涨到某个价位时,自动提醒你卖出。这简直就是私人订制的智能管家啊!

我跟你说,这触发器简直是神器!定时触发可以用来做报表,每天定时发给老板,他肯定喜欢;延迟触发可以用来做提醒,比如“半小时后提醒我摸鱼”,上班必备;回调触发就更厉害了,可以跟外部系统联动,比如监控系统发现服务器挂了,自动触发 Agent 去重启,简直是运维福音!

我比较好奇的是,Agent 学习到的“经验”具体是什么形式存储的?是代码片段、参数配置,还是某种向量化的表示? 感觉这会直接影响到经验的复用效率和准确性。

经验学习这玩意儿,用好了是神器,用不好就是猪队友。就怕Agent变成一个只会抄作业的学渣,完全没有自己的思考。

我觉得可以试试这几个方法:
1. 给Agent一点叛逆精神:不能让它总是按部就班,偶尔也要鼓励它创新一下,尝试一些新的方法。
2. 让Agent保持好奇心:不能只盯着历史经验,也要让它多看看外面的世界,学习新的知识和技能。
3. 给Agent一个纠错机制:如果Agent发现历史经验有问题,就要及时纠正,不能一条路走到黑。

从安全角度看,“代码即行动”也带来了一些挑战。虽然有安全沙箱,但如果生成的代码存在漏洞,仍然可能被利用。预定义工具相对来说更可控,因为它们的行为是预先定义的。所以,在安全性要求高的场景下,需要仔细评估“代码即行动”的风险。

有效提取、存储和复用Agent经验,我觉得可以参考以下几个步骤:

1. 定义清晰的经验类型:例如,成功案例、失败案例、常见问题、解决方案等。
2. 设计合理的提取规则:例如,从Agent的执行日志、用户反馈、知识库等提取经验。
3. 选择合适的存储方式:例如,使用关系型数据库存储结构化数据,使用向量数据库存储非结构化数据。
4. 建立高效的检索机制:例如,使用关键词搜索、语义搜索、向量相似度匹配等。
5. 制定有效的复用策略:例如,将经验注入Prompt,用于快速意图识别,或用于指导Agent的决策过程。

此外,还需要注意经验的维护和更新,定期清理过时或错误的经验,保持经验库的质量。

经验学习嘛,就像给AI开了个“小灶”,让它偷偷学习别人的经验,快速提升自己。

我的理解是:

1. 经验要“精”:别什么都学,只学那些有价值的、能提升能力的。
2. 存储要“巧”:别一股脑儿堆在一起,要分类、整理、打标签,方便查找。
3. 复用要“活”:别死记硬背,要灵活运用,举一反三。

总之,经验学习不是“填鸭式教育”,而是要培养AI的“自主学习能力”,让它能够从经验中总结规律、提升技能,最终成为一个真正智能的Agent。

经验学习是Agent进化的关键!提取经验,我认为要关注两个方面:一是成功经验,二是失败教训。成功经验可以帮助Agent更快地解决类似问题,失败教训可以避免Agent重蹈覆辙。

存储经验,需要选择合适的存储方式。对于结构化的经验,可以使用数据库;对于非结构化的经验,可以使用向量数据库或知识图谱。另外,要对经验进行分类和标注,方便Agent快速检索和复用。

复用经验,可以采用多种方式。比如,将经验注入Prompt,引导Agent做出更合适的决策;或者,将经验用于快速意图匹配,跳过LLM推理,直接执行预定义的动作。

总之,经验学习是一个持续迭代的过程,需要不断收集、分析、存储和复用经验,才能让Agent变得越来越聪明。

这就像一个团队,每个人都有自己的角色,互相配合完成任务。评估模块是项目经理,负责分析需求;Prompt Builder 是文案,负责撰写方案;学习模块是记录员,负责记录过程;经验模块是知识库,负责存储经验。只有团队成员紧密合作,才能交付高质量的产品。

但是,这种模块化的设计也存在一些问题。例如,模块之间的接口定义是否清晰?模块之间的通信是否高效?如果某个模块出现问题,是否会影响整个系统?这些都是需要考虑的问题。模块化不是银弹,需要权衡利弊。

“代码即行动”的优势在于极高的灵活性,能够根据具体任务动态生成代码,组合各种工具,理论上可以完成任何任务。劣势也很明显,就是安全风险。如果AI生成的代码存在漏洞,或者恶意利用了某些工具,可能会造成严重后果。框架使用 GraalVM 沙箱来运行代码,这是一种资源隔离的措施,可以限制代码的影响范围。此外,还可以通过 Prompt 工程,引导 AI 生成更安全的代码。

但预定义工具调用方式更安全,因为它限制了 AI 的行为,只能调用预先定义好的工具,但灵活性较差,无法应对复杂或未知的任务。Assistant Agent 相当于在灵活性和安全性之间做了一个平衡,通过沙箱机制来降低风险。