智能体工作流(Agentic Workflows)专项调研报告

智能数据清洗:从探查到自动化处理的Agentic Workflows实践 在数据处理领域,数据探查(Data Profiling)是理解数据质量、发现潜在问题的关键基础步骤。其核心原理是通过统计分析、模式识别等技术,对数据的完整性、一致性、有效性及内在关联进行全面评估,生成结构化的数据健康诊断报告。这一过程的技术价值在于将传统依赖人工经验的“体力活”,转化为系统化、可复用的质量检测流程,为后续的数据清洗、转换与增强提供精准的输入。其典型的应用场景广泛覆盖数据仓库ETL流程、自助分析平台的数据预处理以及机器学习特征工程等环节。随着大语言模型(LLM)与智能体(Agent)技术的发展 阅读详情

目录

执行摘要

一、 核心概念:什么是智能体工作流?

1.1 定义

1.2 与传统自动化的区别

1.3 核心循环:ReAct (Reason + Act)

二、 智能体工作流的通用技术架构

三、 典型工作流模式与应用案例

3.1 模式一:顺序链式工作流 (Sequential Chain)

3.2 模式二:分支判断工作流 (Branching)

3.3 模式三:多智能体协作工作流 (Multi-Agent Collaboration)

四、 挑战与未来趋势

4.1 当前挑战

4.2 未来趋势

结论

工具和组件

① 工具调用(Tool Calling)

② LangGraph 工具包

③ AutoGen 工具包

④ LangChain 工具包

⑤ 横向对比(一句话记忆)


报告副标题: 从单一任务自动化到多步复杂问题求解的范式转移
报告日期: 2025年9月7日
撰写单位: 人工智能与自动化研究中心

执行摘要

本报告旨在深入调研智能体工作流(Agentic Workflows) 这一引领下一代人工智能应用的核心范式。与传统单次调用的AI模型不同,智能体工作流通过让大型语言模型(LLM)担任“协调者”,自主调用工具、循环执行“思考-行动-观察”步骤,直至完成复杂多步任务。报告发现,该技术正从电商、金融、研发等数字化程度高的行业开始落地,其核心价值在于将AI从“被动应答的工具”转变为“主动解决问题的伙伴”。实现高效可靠的工作流需攻克规划、记忆、评估等关键技术挑战,但其未来发展将重塑软件自动化形态和人机协作模式。


一、 核心概念:什么是智能体工作流?

1.1 定义

智能体工作流是指由大型语言模型(LLM)驱动,能够自主理解复杂目标、进行任务分解、规划执行步骤、调用外部工具(API、函数、数据库),并根据执行结果动态调整策略,最终完成任务的自动化过程。

1.2 与传统自动化的区别
特征传统自动化 (e.g., RPA脚本)智能体工作流 (Agentic Workflow)
范式过程驱动目标驱动
灵活性僵硬、需预设所有路径灵活、可应对不确定性
处理能力处理结构化、规则明确的任务处理模糊、非结构化、需推理的任务
核心流程(Flow)认知(Cognition)+ 行动(Action)
示例“如果收到A邮件,则回复B模板。”“帮我分析本季度销售数据,找出下滑原因并做一份PPT报告。”
1.3 核心循环:ReAct (Reason + Act)

这是智能体工作流最基本的执行单元,构成了其“自主”能力的基石。

图表

代码

下载

思考
Reason

行动
Act

观察
Observe

一次ReAct循环的伪代码示例:

text

复制

下载

思考: “用户想订机票。我需要先知道他要去哪、什么时候走。”
行动: 调用【询问用户函数】(“请问您的目的地和出行日期是?”)
观察: 用户回复:“明天从北京去上海。”

思考: “用户提供了信息。现在我需要搜索航班。”
行动: 调用【搜索航班API】(出发地=北京, 目的地=上海, 日期=明天)
观察: API返回了航班列表[CA123, MU456...]

思考: “搜索成功。现在需要展示结果让用户选择。”
行动: 调用【展示结果函数】(航班列表)
观察: 用户选择“CA123”

思考: “用户已选择航班,现在需要帮他订票。”
行动: 调用【创建订单API】(航班=CA123, 用户=当前用户)
...

这个循环会持续进行,直到任务完成或无法继续。


二、 智能体工作流的通用技术架构

一个成熟的智能体工作流系统通常包含以下核心模块,其协同工作关系如下图所示:

图表

代码

下载

智能体工作流系统
Agentic Workflow System

外部世界 External World

制定计划

记录执行轨迹

提供上下文

提供上下文

评估执行结果
优化计划与动作

评估执行结果
优化计划与动作

输入目标/任务

调用

输出最终结果

返回执行结果

用户 User

第三方工具与API
Tools & APIs

规划模块
Planner

执行模块
Executor

记忆模块
Memory

评估模块
Evaluator

各模块核心功能与关键技术:

  • 规划模块 (Planner):

    • 功能:将抽象目标分解为具体可执行的子任务序列(Plan)。可分为:

      • 战略规划:生成高级别的任务列表(如:1. 数据获取 -> 2. 数据分析 -> 3. 报告生成)。

      • 战术规划:为每个任务选择具体工具和参数。

    • 技术:Chain-of-Thought (CoT), Tree-of-Thought (ToT), LLM + 约束求解器。

  • 执行模块 (Executor):

    • 功能:负责运行规划好的步骤,核心是工具调用(Tool Use)。

    • 技术:LLM的函数调用(Function Calling)能力。框架如LangChain、LlamaIndex提供标准化工具调用接口。

  • 记忆模块 (Memory):

    • 功能:存储工作流执行过程中的上下文,包括历史动作、观察结果、用户偏好等,防止遗忘。

    • 技术:

      • 短期记忆:在对话或单次工作流中记住上下文。

      • 长期记忆:通过向量数据库存储和检索历史经验,供未来任务参考。

  • 评估模块 (Evaluator):

    • 功能:监控工作流的执行质量,判断当前步骤是否成功,决策是继续、重试还是终止。

    • 技术:由LLM自身评估(Self-Correction),或通过规则、模型进行验证。


三、 典型工作流模式与应用案例

3.1 模式一:顺序链式工作流 (Sequential Chain)

案例:电商购物助手
工作流:

  1. 需求澄清:与用户多轮对话,明确商品属性、预算、偏好。

  2. 商品检索:调用搜索API,获取初始商品列表。

  3. 筛选比价:调用比价API、情感分析API,过滤出最优选项。

  4. 决策确认:将选项生成图文并茂的列表,交由用户确认。

  5. 下单支付:调用订单API、支付API完成购买。
    特点:步骤线性推进,是最常见的模式。

3.2 模式二:分支判断工作流 (Branching)

案例:医疗AI助手
工作流:

  1. 信息提取:从医患对话中提取症状。

  2. 决策点:LLM判断症状是否清晰。

    • 分支1 (清晰):直接检索知识库,提供诊断建议。

    • 分支2 (模糊):调用【追问函数】,向医生提示需要询问患者的其他问题(如“疼痛是锐痛还是钝痛?”)。

  3. 继续执行:根据新的信息,继续流程。
    特点:引入条件判断,工作流路径动态变化。

3.3 模式三:多智能体协作工作流 (Multi-Agent Collaboration)

案例:AI软件团队
工作流:

  • 项目经理Agent:接收需求(“开发一个登录功能”),进行任务分解,分配给其他Agent。

  • 后端开发Agent:负责创建API、数据库模型。

  • 前端开发Agent:负责编写用户界面。

  • 测试工程师Agent:负责编写和运行测试用例。

  • 协调者:所有Agent将工作结果汇报给“项目经理”,由其进行集成和部署。
    特点:模拟人类团队分工,解决超复杂任务,是Agent技术的终极形态。


四、 挑战与未来趋势

4.1 当前挑战
  1. 可靠性:LLM的“幻觉”可能导致工作流走向错误方向。

  2. 成本与延迟:多步循环调用LLM和API,成本高昂且耗时。

  3. 复杂状态管理:长工作流的状态跟踪和错误恢复非常复杂。

  4. 评估与测试:缺乏标准化框架来评估工作流的整体有效性。

4.2 未来趋势
  1. 小型化与专业化:训练小型、专用于工作流规划和工具调用的模型,以降低成本。

  2. 工作流即代码:出现声明式语言或DSL,用于直观地定义和编排智能体工作流。

  3. 增强记忆与学习:工作流能够从历史执行中学习成功经验和失败教训,不断优化。

  4. 人机协同回路:工作流能在关键决策点主动“询问”人类,形成人机混合的增强智能。

结论

智能体工作流不是单一技术的突破,而是LLM的认知能力、软件工具生态和自动化技术的一次深度融合。它标志着AI应用开发正从“编写逻辑”转向“定义目标”,从“功能制造”走向“能力组装”。

尽管面临可靠性与成本的挑战,但其方向是明确的:成为连接数字世界能力的“万能胶水”和“自动执行者”。率先掌握智能体工作流设计和实施能力的企业与开发者,将在新一轮的生产力革命中占据绝对优势。

工具和组件

工具调用、LangGraph、AutoGen、LangChain 工具包 是什么、在智能体里怎么配合、有什么差异**。


① 工具调用(Tool Calling)

一句话:让大模型像人一样“拿起锤子敲钉子”——把自然语言转成 JSON 去调函数/接口。

LangGraph 内用法(官方 create_react_agent):

Python

复制

from langgraph.prebuilt import create_react_agent
from langchain_community.tools.tavily_search import TavilySearchResults

tool = TavilySearchResults(max_results=5)
agent = create_react_agent(model, [tool])   # ← 一行完成 ReAct 循环
answer = agent.invoke({"messages": [{"role": "user", "content": "台风最新路径"}]})

作用:模型→JSON→调工具→结果回模型→继续推理,直到满足停止条件。


② LangGraph 工具包

一句话:LangChain 的“状态机+图”升级版,专门画循环流程图(ReAct、Multi-Agent、Human-in-the-loop)。

核心类:

  • StateGraph:画节点和边

  • ToolNode:自动把工具调用转成 HTTP/函数

  • create_react_agent:一键生成“思考-行动-观察”循环

  • interrupt():人工介入/审批(非WebSocket,可中断几小时)

典型图(ReAct):

用户问 → LLM → ToolNode → 结果 → LLM → … → 回答

多智能体示例(Supervisor+Swarm):

Python

复制

from langgraph_supervisor import supervisor
from langgraph_swarm import swarm

supervisor_agent = supervisor([agent1, agent2])   # 自动路由
swarm_agent = swarm([agent1, agent2])             # 无中心广播

作用:画循环、存状态、插人工、一键部署到LangGraph Platform。


③ AutoGen 工具包

一句话:微软的“多智能体群聊”框架,角色+对话即服务。

核心类:

  • UserProxyAgent:代表人

  • AssistantAgent:LLM

  • GroupChat:群聊房间

  • register_function:把Python函数变成工具

群聊代码:

Python

复制

from autogen import GroupChat, AssistantAgent, UserProxyAgent

user = UserProxyAgent(name="user")
assistant = AssistantAgent(name="assistant", llm_config={"config_list": [...]})
groupchat = GroupChat(agents=[user, assistant], messages=[], max_round=5)
user.initiate_chat(groupchat, message="生成台风疏散剧本")

作用:零代码实现“辩论-投票-协作”,适合金融、医疗多角色会诊。


④ LangChain 工具包

一句话:最早、最全的“LLM工具链”底座,被LangGraph/AutoGen都拿来当插件。

核心工具(LangGraph可直接调用):

表格

复制

类别工具示例作用
搜索TavilySearchResults, SerpAPIWrapper实时网页
计算PythonREPLTool, LLMMathTool代码/数学
数据SQLDatabaseToolkit, PandasDataframeToolSQL/表格
网络RequestsGetTool, PlaywrightBrowserToolkitHTTP/浏览器
文件ReadFileTool, WriteFileTool本地文件
LLMChatOpenAI, ChatAnthropic模型封装
自定义@tool 装饰器任意函数→工具

LangGraph内调用:

Python

复制

from langchain.tools import @tool
@tool
def weather(city: str) -> str:
    return f"{city} 台风级 12级"
agent = create_react_agent(model, [weather])  # ← 一行注册

作用:让LangGraph/AutoGen瞬间拥有“几百种现成工具”,无需再造轮子。


⑤ 横向对比(一句话记忆)

表格

复制

框架核心能力典型代码最佳场景
Tool Calling把语言→JSON→工具create_react_agent单模型+工具循环
LangGraph画循环图+状态机StateGraph+ToolNode多Agent/人工审核/复杂流程
AutoGen群聊式多AgentGroupChat角色辩论、会诊、投票
LangChain工具链底座@tool+内置工具提供工具库,被上面三个调用

一句话总结:LangChain供工具,LangGraph画循环,AutoGen组群聊,ToolCalling是底座——四件套叠加,就是“会看、会想、会动、会社交”的完整智能体。

代码

电商购物助手智能体工作流核心代码

我们将使用 LangGraph 来构建这个工作流,它是专门为构建有状态的、多步骤的智能体工作流而设计的框架,比传统的LangChain Agent更强大、更灵活。

1. 项目结构与依赖

安装依赖:

bash

复制

下载

pip install langgraph langchain-openai python-dotenv

项目结构:

text

复制

下载

shopping_agent/
├── .env                    # 存储API密钥
├── requirements.txt        # 项目依赖
├── tools.py               # 定义工具函数
├── agent_workflow.py      # 定义智能体工作流图
└── main.py               # 主入口文件
2. 定义工具(智能体的“手和脚”)

首先,我们定义智能体可以调用的所有工具函数。

python

复制

下载

# tools.py
import json
from typing import List, Dict, Any
from langchain.tools import tool
import requests  # 假设我们使用requests调用外部API

class ShoppingTools:

    @tool("clarify_user_intent")
    def clarify_user_intent(question: str) -> str:
        """
        当用户需求模糊时,向用户提出澄清性问题。
        参数 question: 要向用户提出的问题。
        返回: 用户的回答。
        """
        # 在实际应用中,这里会连接到你的前端聊天界面
        print(f"[Agent asks user]: {question}")
        # 模拟用户输入(实际中应从聊天接口获取)
        user_response = input("Your answer: ")
        return user_response

    @tool("search_products")
    def search_products(query: str, category: str = None, max_results: int = 10) -> str:
        """
        根据查询条件搜索商品。
        参数:
            query: 搜索关键词
            category: 商品类别(可选)
            max_results: 最大返回结果数
        返回: 商品列表的JSON字符串。
        """
        # 这里是模拟数据!真实情况应该调用淘宝/京东/Amazon的API
        print(f"[Agent is searching for]: {query} in {category}")
        
        # 模拟API返回
        mock_products = [
            {"name": "便携式野餐垫", "price": 59.9, "rating": 4.8, "sales": 2000, "store": "户外旗舰店"},
            {"name": "一次性烧烤架", "price": 129.9, "rating": 4.5, "sales": 1500, "store": "烧烤世家"},
            {"name": "不锈钢保温箱", "price": 299.0, "rating": 4.9, "sales": 800, "store": "保鲜专家"}
        ]
        return json.dumps(mock_products, ensure_ascii=False)

    @tool("get_product_details")
    def get_product_details(product_id: str) -> str:
        """
        获取商品的详细信息和用户评价。
        参数 product_id: 商品ID
        返回: 商品详情的JSON字符串。
        """
        # 模拟获取商品详情
        print(f"[Agent is getting details for product]: {product_id}")
        mock_details = {
            "description": "超大防水防潮野餐垫,适合8-10人使用",
            "specs": ["材质: 牛津布", "尺寸: 200*200cm", "重量: 1.2kg"],
            "reviews": ["质量很好!", "户外野餐必备!"]
        }
        return json.dumps(mock_details, ensure_ascii=False)

    @tool("add_to_cart")
    def add_to_cart(product_id: str, quantity: int = 1) -> str:
        """
        将商品加入购物车。
        参数:
            product_id: 商品ID
            quantity: 数量
        返回: 操作结果。
        """
        print(f"[Agent is adding {quantity} of {product_id} to cart]")
        return f"已成功将商品 {product_id} (x{quantity}) 加入购物车"

    @tool("check_budget")
    def check_budget(selected_items: List[Dict], budget: float) -> str:
        """
        检查已选商品总价是否超出预算。
        参数:
            selected_items: 已选商品列表
            budget: 预算金额
        返回: 预算检查结果和推荐调整。
        """
        total = sum(item['price'] * item.get('quantity', 1) for item in selected_items)
        result = {
            "total_price": total,
            "within_budget": total <= budget,
            "difference": budget - total
        }
        return json.dumps(result, ensure_ascii=False)

# 获取所有工具
def get_tools():
    shopping_tools = ShoppingTools()
    return [
        shopping_tools.clarify_user_intent,
        shopping_tools.search_products,
        shopping_tools.get_product_details,
        shopping_tools.add_to_cart,
        shopping_tools.check_budget
    ]
3. 定义智能体工作流状态

LangGraph 使用状态机来管理工作流的执行。我们首先定义状态的结构。

python

复制

下载

# agent_workflow.py
from typing import TypedDict, List, Annotated, Optional
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from tools import get_tools
from langchain.tools.render import format_tool_to_openai_function
from langchain_core.messages import HumanMessage, AIMessage
import operator

# 1. 定义状态结构
class AgentState(TypedDict):
    # 用户原始输入
    user_input: str
    # 对话消息历史
    messages: Annotated[List, operator.add]
    # 已澄清的用户需求
    clarified_needs: Optional[dict]
    # 搜索到的商品列表
    search_results: Optional[List[dict]]
    # 已选中的商品
    selected_items: Optional[List[dict]]
    # 预算检查结果
    budget_status: Optional[dict]
    # 工作流是否完成
    complete: bool
4. 定义工作流节点(Nodes)

我们将工作流分解为多个节点,每个节点负责一个特定任务。

python

复制

下载

# agent_workflow.py (续)
# 2. 初始化LLM和工具
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
tools = get_tools()
functions = [format_tool_to_openai_function(t) for t in tools]

# 3. 定义各个节点函数
def clarify_needs_node(state: AgentState):
    """节点1: 澄清用户需求"""
    print("=== 阶段1: 澄清需求 ===")
    
    # 让LLM判断是否需要澄清需求,以及要问什么问题
    system_prompt = """你是一个购物助手。用户说: {user_input}
    请分析是否需要进一步澄清以下信息:商品类别、预算、具体规格、数量等。
    如果需要澄清,请提出具体问题;如果不需要,直接返回"proceed"。
    """.format(user_input=state["user_input"])
    
    response = llm.invoke([HumanMessage(content=system_prompt)])
    need_clarification = "proceed" not in response.content.lower()
    
    if need_clarification:
        # 需要澄清,调用工具提问
        clarification_question = response.content
        user_answer = tools[0].invoke({"question": clarification_question}) # clarify_user_intent
        
        return {
            "clarified_needs": {
                "original_query": state["user_input"],
                "clarification_q": clarification_question,
                "clarification_a": user_answer
            },
            "messages": [AIMessage(content=f"需要澄清: {clarification_question}")]
        }
    else:
        # 需求明确,继续下一步
        return {
            "clarified_needs": {"original_query": state["user_input"]},
            "messages": [AIMessage(content="需求已明确,开始搜索商品。")]
        }

def search_products_node(state: AgentState):
    """节点2: 搜索商品"""
    print("=== 阶段2: 搜索商品 ===")
    
    # 基于澄清后的需求构建搜索查询
    needs = state["clarified_needs"]
    search_query = f"{needs['original_query']} {needs.get('clarification_a', '')}"
    
    # 调用搜索工具
    results = tools[1].invoke({"query": search_query, "max_results": 5}) # search_products
    products = json.loads(results)
    
    return {
        "search_results": products,
        "messages": [AIMessage(content=f"找到了{len(products)}个相关商品")]
    }

def select_and_validate_node(state: AgentState):
    """节点3: 选择商品并验证预算"""
    print("=== 阶段3: 选择商品和预算验证 ===")
    
    # 让LLM基于需求和商品列表进行选择
    system_prompt = """你是一个购物助手。用户需要: {user_input}
    现有商品列表: {products}
    请为用户选择最合适的商品,考虑价格、评分、销量等因素。
    返回格式: JSON {{"selected_items": [{{"name": "...", "price": ..., "quantity": ...}}]}}
    """.format(
        user_input=state["clarified_needs"]["original_query"],
        products=json.dumps(state["search_results"], ensure_ascii=False)
    )
    
    response = llm.invoke([HumanMessage(content=system_prompt)])
    # 解析LLM的输出,提取选择的商品
    selected_items = json.loads(response.content)["selected_items"]
    
    # 检查预算(假设预算500元)
    budget_check = tools[4].invoke({ # check_budget
        "selected_items": selected_items,
        "budget": 500.0
    })
    budget_status = json.loads(budget_check)
    
    return {
        "selected_items": selected_items,
        "budget_status": budget_status,
        "messages": [AIMessage(content=f"已选择{len(selected_items)}件商品,总价{budget_status['total_price']}元")]
    }
5. 构建工作流图(Graph)

这是最核心的部分,我们将节点连接起来,并定义执行逻辑。

python

复制

下载

# agent_workflow.py (续)
def should_continue(state: AgentState):
    """判断条件:根据预算状态决定下一步"""
    if state["budget_status"]["within_budget"]:
        return "add_to_cart"  # 预算内,继续加入购物车
    else:
        return "adjust_selection"  # 超预算,需要调整

def add_to_cart_node(state: AgentState):
    """节点4: 加入购物车"""
    print("=== 阶段4: 加入购物车 ===")
    
    for item in state["selected_items"]:
        # 模拟加入购物车,实际中需要真实的商品ID
        tools[3].invoke({ # add_to_cart
            "product_id": f"prod_{hash(item['name'])}", 
            "quantity": item.get('quantity', 1)
        })
    
    return {
        "complete": True,
        "messages": [AIMessage(content="所有商品已成功加入购物车!")]
    }

def adjust_selection_node(state: AgentState):
    """节点5: 调整选择(如果超预算)"""
    print("=== 阶段5: 调整选择(超预算) ===")
    
    # 让LLM基于超预算情况重新选择
    system_prompt = """当前选择已超出预算{over_budget}元。
    原商品列表: {products}
    请调整选择,确保在预算内,优先保留评分高、更符合需求的商品。
    返回新的选择方案。
    """.format(
        over_budget=-state["budget_status"]["difference"],
        products=json.dumps(state["search_results"], ensure_ascii=False)
    )
    
    response = llm.invoke([HumanMessage(content=system_prompt)])
    new_selection = json.loads(response.content)["selected_items"]
    
    # 更新状态,然后重新检查预算
    return {
        "selected_items": new_selection,
        "messages": [AIMessage(content="已重新选择商品,将重新检查预算")]
    }

# 构建工作流图
def create_workflow():
    builder = StateGraph(AgentState)
    
    # 添加节点
    builder.add_node("clarify_needs", clarify_needs_node)
    builder.add_node("search_products", search_products_node)
    builder.add_node("select_and_validate", select_and_validate_node)
    builder.add_node("add_to_cart", add_to_cart_node)
    builder.add_node("adjust_selection", adjust_selection_node)
    
    # 设置入口点
    builder.set_entry_point("clarify_needs")
    
    # 添加边(连接节点)
    builder.add_edge("clarify_needs", "search_products")
    builder.add_edge("search_products", "select_and_validate")
    
    # 条件边:根据预算检查结果决定下一步
    builder.add_conditional_edges(
        "select_and_validate",
        should_continue,
        {
            "add_to_cart": "add_to_cart",
            "adjust_selection": "adjust_selection"
        }
    )
    
    # 调整选择后重新验证预算
    builder.add_edge("adjust_selection", "select_and_validate")
    
    # 结束边
    builder.add_edge("add_to_cart", END)
    
    # 编译图
    graph = builder.compile()
    return graph
6. 主程序入口

python

复制

下载

# main.py
from agent_workflow import create_workflow, AgentState
from langchain_core.messages import HumanMessage
import asyncio

async def main():
    # 1. 创建工作流
    workflow = create_workflow()
    
    # 2. 定义初始状态
    initial_state: AgentState = {
        "user_input": "我想为周末的8人户外野餐准备必需品",
        "messages": [HumanMessage(content="我想为周末的8人户外野餐准备必需品")],
        "clarified_needs": None,
        "search_results": None,
        "selected_items": None,
        "budget_status": None,
        "complete": False
    }
    
    # 3. 执行工作流
    print("🚀 启动购物助手工作流...")
    final_state = await workflow.ainvoke(initial_state)
    
    # 4. 打印结果
    print("\n🎉 工作流执行完成!")
    for msg in final_state["messages"]:
        if hasattr(msg, 'content'):
            print(f"{msg.content}")

if __name__ == "__main__":
    asyncio.run(main())

执行流程与输出示例

当你运行 main.py 时,工作流会按以下步骤执行:

  1. 澄清需求:Agent可能会问:“请问您的预算是多少?对品牌有偏好吗?”

  2. 搜索商品:基于你的回答搜索相关商品。

  3. 选择与验证:LLM智能选择商品并检查是否超预算。

  4. 决策点:

    • 如果未超预算 -> 加入购物车 -> 结束。

    • 如果超预算 -> 调整选择 -> 跳回第3步重新验证。

  5. 完成:输出最终结果。

这个代码示例完美展示了智能体工作流的精髓:

  • 状态管理:通过 AgentState 在不同节点间传递和更新数据。

  • 条件路由:根据预算检查结果动态决定下一步路径。

  • 工具调用:无缝集成外部API和函数。

  • 循环机制:超预算时可以循环调整直到满足条件。

你可以通过扩展工具集(集成真实电商API)和增加更多节点(如支付、物流查询)来使这个工作流变得更加强大和实用。

EvoFlow: Evolving Diverse Agentic Workflows On The Fly 在过去的两年里,基于大型语言模型(LLM)的多智能体系统经历了从劳动密集型手工设计到部分自动化(例如,即时工程、通信拓扑)以及最终到全自动化设计的演变。然而,现有的代理自动化管道通常缺乏LLM异构性,并专注于单目标性能优化,这限制了它们将较弱的模型组合成更加定制和经济高效的解决方案的潜力。为了应对这一挑战,我们提出了EvoFlow,这是一个基于小生境进化算法的框架,用于自动搜索异构和复杂性自适应的代理工作流群体,而不是单个同构的复杂工作流。 阅读详情

相关推荐

GitHub Agentic Workflows:用自然语言重塑CI/CD自动化

在软件工程领域,持续集成与持续交付(CI/CD)是现代研发效能的核心支柱,它通过自动化构建、测试和部署流程来加速软件交付。传统CI/CD工具如GitHub Actions通常依赖YAML等配置文件进行指令式编排,虽然确保了确定性,但在灵活性和智能决策方面存在局限。随着AI智能体技术的发展,一种新的范式正在兴起:将AI作为自动化流程中的决策引擎,实现从“指令式”到“声明式+智能体”的转变。这种技术价值在于,它允许开发者用自然语言声明意图,由AI动态规划并执行复杂任务,从而应对需要临场判断、多步骤决策的自动化场

weixin_33733810的博客 284

Agentic Workflows:让工作流更智能、更灵活

在深入探讨 Agentic Workflows 之前,我们先来了解一下智能体(AI Agents)究竟是什么。智能体是一种结合了LLM用于推理和决策的系统,同时配备了与现实世界交互的工具,能够在有限的人类干预下完成复杂任务。它们被赋予特定的角色和不同程度的自主性,以实现最终目标。更重要的是,智能体还具备记忆功能,能够从过去的经历中学习并随着时间提升性能。了解了智能体的核心组件后,我们再来看看 Agentic Workflows 到底是什么。

m0_59164304的博客 1131

GitHub Agentic Workflows:用AI智能体重塑自动化,安全与智能的融合实践

自动化是现代软件开发的核心实践,从持续集成到部署流水线,它通过预设规则提升效率。然而,传统自动化在面对需要理解代码上下文、动态决策的非标准化任务时存在局限。AI智能体技术的引入,为解决这一问题提供了新思路。智能体能够理解自然语言指令,在特定边界内自主规划与执行任务,其技术价值在于将认知能力融入自动化流程,实现从“机械执行”到“智能响应”的跃升。在应用场景上,它尤其适用于智能代码审查、动态任务编排、文档同步等需要语义理解与判断的环节。GitHub Agentic Workflows(gh-aw)正是这一理念的

weixin_30918633的博客 296

一文搞懂智能体工作流 (Agentic Workflows):从核心模式到实战用例,附示例深度解析

一文搞懂智能体工作流 (Agentic Workflows):从核心模式到实战用例,附示例深度解析

大模型研究中心 5438

【agent】吴恩达谈 Agentic Workflows 的启示

摘要:吴恩达提出的Agentic Workflows强调AI需具备四大关键能力:反思(Reflection)、工具调用(Tool Use)、规划(Planning)和多智能体协作(Multi-Agent Collaboration)。这些能力虽未直接使用"确定性编排"和"世界模型"术语,但通过规划确保可控性,多智能体协同要求共享环境认知,实质体现了工业级AI所需的可复查、一致性和稳定性。该框架为构建可靠AI系统提供了重要指导,特别适用于需要确定性产出的生产场景。(14

突围 179

解决用VScode写中文注释,Vivado打开之后是乱码的方法

这样就解决了中文注释乱码的问题,此外如果使用notepad++写verilog代码的话直接在notepad++上面将编码格式改为ANSI格式即可,更加方便快捷,所以此方法仅针对习惯用VScode写Verilog的同学,如果有其他好办法的话欢迎评论区补充。首先,VScode中的中文默认编码格式是UTF-8,然后Vivado的编码格式是vivado 默认的应该是ANSI编码格式,刚开始我先按照网上说明的,将VScode中的编码格式改为GBK格式(点击右下角->点击通过编码保存)。

weixin_50573305的博客 5817

技术速递|使用 GitHub Agentic Workflows 自动化仓库任务

作者:Don Syme & Peli de Halleux排版:Alan Wang探索现已进入技术预览阶段的 GitHub Agentic Workflows。通过在 GitHub Actions 中使用编码智能体构建自动化流程,处理问题分流、文档编写、代码质量检查等任务。想象一下,某天早晨你打开仓库时感到格外安心,因为你看到:Issues 已完成分流并打好标签CI 失败已被调查,并附有建议修复方案文档已根据最近的代码变更完成更新。

MicrosoftReactor的博客 1309

避坑指南:解决‘Logical volume contains a filesystem in use’错误,顺利完成LVM根目录扩容

本文详细解析了Linux系统中LVM根目录扩容时遇到的‘Logical volume contains a filesystem in use’错误,提供了从错误诊断到实战解决方案的完整指南。通过动态扩容技术、单用户模式操作和LVM快照等方案,帮助管理员顺利完成根目录扩容,避免数据丢失和系统崩溃。

weixin_28702105的博客 228

【Agent智能体1 | 什么是 agentic AI?为什么agentic AI workflows如此强大】

讲述了什么是 agentic AI以及agentic AI workflows的基本概述

DdigitalNomad的博客 641

《科研伦理与学术规范》 全部 习题_答案 2020年秋

科研伦理与学术规范 答案 文章目录科研伦理与学术规范 答案1. 第一章课后习题(必做) 答案1.1 第一章Demo2. 第二章课后习题(必做) 答案3. 第三章课后习题(必做) 答案4. 第四章课后习题(必做) 答案5. 第五章课后习题(必做) 答案6. 第六章课后习题(必做) 答案 # 每行5题 #写于2020.11.17 侵删 1. 第一章课后习题(必做) 答案 ABC, A, B ,D ,ABCD ABC, D, A, BCD, C D, D, 1.1 第一章Demo

羊老羊 25万+

Pulpino SoC中挂载AXI从机接口的自定义IP说明

AXI 从机接口挂载 Pulpino SoC 调试Pulpino SoC中挂载AXI从机接口的自定义IP说明PULPion SoC介绍自定义AXI IP挂载IP挂载框图代码修改脚本修改自定义AXI IP调试C语言编写软件调试硬件调试 Pulpino SoC中挂载AXI从机接口的自定义IP说明 本篇文章主要从工程的角度描述了如何将具有AXI从机接口的自定义IP挂载到Pulpino SoC上,其中不涉及到SoC中的任何原理知识。 PULPion SoC介绍 PULPion SoC整体架构如下图所示, PULPi

小陈的芯片学习之路 2212

医疗AI智能体安全实践:基于TRiSM框架构建可信Agentic Workflows

在人工智能技术快速发展的今天,大语言模型(LLM)与检索增强生成(RAG)技术正驱动着智能体(Agent)在复杂场景中的应用。其核心原理在于通过外部知识检索与内部推理的结合,扩展模型能力边界。这一技术的核心价值在于处理专业、动态的知识密集型任务。尤其在医疗等高可靠性要求的领域,其应用场景从辅助诊断延伸到用药审查等关键环节。然而,智能体工作流(Agentic Workflows)在实际部署中面临检索幻觉、决策黑箱、多代理协作分歧等信任与安全挑战。本文聚焦TRiSM(可信赖、负责任、安全)管理框架,探讨如何通过

weixin_29052717的博客 363

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

一文看懂:AI 圈刷屏的 Agentic Workflows 到底是个啥?这篇终于说明白了!

呼~ 咱们今天一起深入探索了这个有点硬核但又极其重要的概念。Agentic Workflows 是啥?它们是由一个或多个AI Agent动态驱动的、用于完成复杂任务的工作流。这些 Agent 结合了LLM 的推理能力、与现实世界交互的工具以及学习适应的记忆。能够规划使用工具执行、并反思迭代。这让它们区别于死板的传统工作流和简单的 Non-agentic AI 工作流。PlanningTool UseReflection,这些模式是构建 Agentic Workflows 的基石。我们看到了。

2401_85390073的博客 2534

华中农业大学C++考试基础练习题

实验一 1 通过日期求某月的天数。 输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。 输入描述 输入两个正整数y和m分别表示年份和月份。 输出描述 如果y和m满足条件:1900<=y<3000,0<m<13,输出该月的天数;否则输出“Input error!”。 输入样例 2010 12 输出样例 31 #include"iostream" using n

雨的博客 1万+

LVGL8.x 实体按键与Keypad驱动的无缝对接实战

本文详细解析了LVGL8.x中实体按键与Keypad驱动的两种对接方案:坐标映射的Button方式与事件驱动的Keypad方式。重点阐述了如何模块化裁剪lv_port_indev.c模板文件,并深入讲解了Keypad驱动与Group焦点管理系统的核心协作机制,为无触摸屏的嵌入式设备提供流畅的UI交互解决方案。

weixin_29164497的博客 450

技术速递|提升 GitHub Agentic Workflows 的 Token 使用效率

GitHub通过token监控与自动优化工具,解决Agentic Workflows中三类低效问题,用预下载数据、CLI替代等方式大幅降本,提出有效Token指标统一评估,相关优化工具已集成到GitHub框架。

微软技术栈 486

软考备考:《系统规划与管理师教程》(第2版)第2章——数字ZG与数智化发展

🔴数字化转型的定义:数字化转型是建立在数字化转换、数字化升级基础上,进一步触及组织核心业务,以新建一种业务模式为目标的高层次转型。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 963

智能化工作流(Agentic Workflows)是什么?有什么模式和应用场景,从零开始讲解!

如果你真的想学习大模型,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!

2401_85375186的博客 1815

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

GitHub 推出了 Agentic Workflows,并且提供了 Copilot 免费套餐

GitHub推出Agentic Workflows(智能体工作流)技术预览版,旨在提升开发效率。同时宣布Copilot提供免费套餐,无需订阅即可使用。更多资讯可关注x-cmd博客获取。

edwinjhlee的博客 854

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

智能体工作流在医疗文书生成中的应用:以MedScribe项目为例

智能体工作流(Agentic Workflows)是一种将复杂任务分解为多个专业化智能体协同完成的技术架构,其核心原理在于通过模块化设计,让每个智能体专注于特定子任务,并通过中央调度器协调通信与执行顺序,从而实现高精度、高可靠性的自动化流程。在工程实践中,这种架构尤其适用于医疗、金融等强规范、高要求的领域,能够显著提升任务处理的标准化程度与效率。以医疗场景为例,临床文书生成涉及多模态信息处理、医学术语标准化和临床逻辑关联等复杂环节,传统单一模型方案难以兼顾精度与可控性。通过引入信息感知、逻辑结构化、临床语境

weixin_33824363的博客 419

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

从零开始讲解:大模型智能化工作流(Agentic Workflows)是什么?有什么模式和应用场景?

AI 智能体、智能化 AI、智能化架构、智能化工作流。智能体(Agents)无处不在。但它们到底是什么?它们真的能做些什么吗?

2401_85325726的博客 1452

技术速递|底层机制:GitHub Agentic Workflows 的安全架构

作者:Landon Cox & Jiaxiao Zhou排版:Alan WangGitHub Agentic Workflows 构建于隔离、受限输出以及全面日志记录之上。了解我们的威胁模型和安全架构如何帮助团队在 GitHub Actions 中安全运行智能体。无论你是开源维护者还是企业团队的一员,早上醒来看到文档修复、新的单元测试以及重构建议,都会是一个真正的“aha”时刻。但自动化也带来了一个重要问题:如何为能够访问你的代码仓库和互联网的智能体设置护栏?

MicrosoftReactor的博客 484
上一篇: 智能体的工作流
下一篇: 航空客流分析与预测模型之西南篇
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

交通上的硅基思维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值