找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1516

积分

0

好友

222

主题
发表于 前天 02:08 | 查看: 12| 回复: 0

谈及Agent开发框架,LangChain总是绕不开的话题。作为过度设计的典型案例,其不必要的抽象封装、紧密耦合的架构以及频繁的重大版本变更,曾让许多开发者对Agent框架望而却步。

大多数Agent的核心是一个带循环的大模型工作流,并辅以与外部信息(如向量数据库、工具)的交互。对于有经验的开发者而言,实现这种范式并不困难,因此许多人选择直接“手搓轮子”。然而,在开发过程中,诸如提示词迭代、工具管理、状态维护、日志监控、错误处理、质量评估与故障追踪等大量重要但繁琐的“脏活”,会显著拖慢项目进度。

成熟的框架通常会系统性地解决上述问题,这些功能经过社区上千次提交与迭代才得以完善。开发者在项目初期往往专注于核心流程,容易忽视后期的可维护性,最终导致项目陷入困境。此时,开发者开始转向模块化、专注特定功能的框架,避免对单一臃肿框架的强依赖,旨在寻求自由度与可维护性之间的平衡。例如,专注于流程编排的PocketFlow、专注于简化模型交互的ELL,以及专注于结果验证与依赖注入的Pydantic AI。它们不追求大而全,而是以解决问题为导向,这种模块化组合的思路正成为Agent开发框架演进的重要方向。

在详细介绍之前,我们先统一对两个关键范式——Workflow(工作流)与Agent(智能体)——的理解与定义。

当我们在谈论Agent时,我们在谈论什么?

图片

Workflows v.s. Agents

  • Workflow(工作流):针对固定任务遵循既定范式的流程,其每一个原子化任务都严格遵循预设路径,流程本身不会出现偏差。
  • Agent(智能体):拥有更高的自主性(Agency)与自由度,能够根据环境反馈自主调度和编排工具,使得其原子化任务路径不再固定,执行过程更具动态性与随机性。

具体到设计模式上(参考PocketFlow Cookbook的定义):

  • 最基础的Chat模式本质上是处理输入输出的循环,加上对话历史管理。
  • RAGChat Memory模式在Chat基础上引入了向量数据库,分别用于检索外部知识和管理长期记忆。
  • 对于复杂逻辑问题,常采用 CoT + ReAct范式,在循环中增加“思考历史”,让模型在行动前进行推理。
  • 针对长上下文或大规模任务,Map-Reduce模式借鉴了系统领域的“分而治之”思想,将大任务拆解并行处理后再合并。
  • 当需要处理非线性流程时,通用Agent模式采用循环+分支结构,允许系统根据判断走向不同路径,包括调用工具或并发执行预定义的子流程。
  • 更复杂的Multi-Agent系统通常利用发布/订阅(Pub/Sub)机制实现协作,或采用Supervisor模式,由上层管理者规划并分发任务给子Agent完成。

图片

面对复杂的Agent范式与任务场景,从构建可落地、易迭代的大型系统角度出发,选择合适的开发框架至关重要。框架的选择需综合考虑业务需求、开发语言和项目规模。以下梳理了一些典型框架,供项目启动时参考。

(分类基于各框架最突出的优势,并非完全严谨)

01 全栈开发框架

涵盖从开发、维护、监控到前端落地的全流程。

LangGraph

GitHub: https://github.com/langchain-ai/langgraph
开发语言: Python

由LangChain团队开发的基于图论的编排框架,核心是将智能体流程建模为带有状态的有向循环图(StateGraph)。它支持循环逻辑、状态持久化和人在回路,允许定义细粒度的分支与合并逻辑,适用于需要高度确定性控制、复杂错误恢复及长时运行的生产级应用(如可自动修正错误的编码助手)。其优势在于对复杂逻辑的精确控制,但需要开发者显式定义状态模式和图结构。

基于图的Agent开发思路新颖,将流程包装为Graph设计,符合直觉,但在Agent自主性方面略有欠缺,学习成本依然较高。

from langgraph.graph import START, StateGraph
from typing_extensions import TypedDict

class State(TypedDict):
    text: str

def node_a(state: State) -> dict:
    return {"text": state["text"] + "a"}

def node_b(state: State) -> dict:
    return {"text": state["text"] + "b"}

graph = StateGraph(State)
graph.add_node("node_a", node_a)
graph.add_node("node_b", node_b)
graph.add_edge(START, "node_a")
graph.add_edge("node_a", "node_b")

print(graph.compile().invoke({"text": ""}))
# {'text': 'ab'}

可结合LangChain生态的LangSmith等工具实现带监控的生产级应用

CrewAI

GitHub: https://github.com/crewAIInc/crewAI
开发语言: Python

一个精简、高速的Python框架,完全独立构建。相比LangGraph,CrewAI主打Agent自主性多智能体(Multi-Agents)角色扮演协作,通过YAML配置文件定义Agent(实现逻辑与提示词分离)。

# src/my_project/config/agents.yaml
researcher:
  role: >
    {topic} Senior Data Researcher
  goal: >
    Uncover cutting-edge developments in {topic}
  backstory: >
    You're a seasoned researcher with a knack for uncovering the latest
    developments in {topic}. Known for your ability to find the most relevant
    information and present it in a clear and concise manner.

通过其套件CrewAI AOP Suite可快速构建带前端的原型应用。

Haystack

GitHub: https://github.com/deepset-ai/haystack
开发语言: Python

一个用于构建可定制、生产级LLM应用的AI编排框架。它通过管道(Pipeline)或代理(Agent)连接各种组件(模型、向量数据库、文件转换器),特别适合构建RAG、问答系统、语义搜索或聊天机器人。

import os
from haystack.components.agents import Agent
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage
from haystack.tools import ComponentTool
from haystack.components.websearch import SerperDevWebSearch

os.environ["OPENAI_API_KEY"] = "<YOUR OPENAI API KEY>"
os.environ["SERPERDEV_API_KEY"] = "<YOUR SERPERDEV API KEY>"

search_tool = ComponentTool(component=SerperDevWebSearch())
basic_agent = Agent(
    chat_generator=OpenAIChatGenerator(model="gpt-4o-mini"),
    system_prompt="You are a helpful web agent.",
    tools=[search_tool],
)
result = basic_agent.run(messages=[ChatMessage.from_user("When was the first version of Haystack released?")])
print(result['last_message'].text)

02 流程编排框架

专注于对Agent逻辑功能进行编排,封装Pipeline设计,以实现工作流为目的。通常较为轻量,主要解决并发逻辑和代码可读性问题。

PocketFlow

GitHub: https://github.com/The-Pocket/PocketFlow
开发语言: 多语言(Python, Typescript, Java, C++, Go, Rust and PHP)

仅约100行代码的极简LLM框架,主张零依赖。它通过嵌套有向图抽象来处理Agent编排中的批处理、并行和异步操作。PocketFlow旨在对抗框架臃肿,本质是一组抽象类(节点Node和流Flow),帮助开发者更清晰地实现流行设计模式。

图片

其精简代码的另一好处是便于AI(如Vibe Coding)理解项目结构。但该框架主要优化了编码规范和逻辑清晰度,模型调用、会话管理、日志记录等具体实现仍需开发者完成,对新手可能不够友好。

microsoft-agent-framework

GitHub: https://github.com/microsoft/agent-framework/
开发语言: Python, C# ( .NET)

微软自用的Agent开发框架,同样基于图的工作流编排。它封装了流式传输、状态检查点、人在回路、时间回溯等功能,通过DevUI扩展包可构建前端界面,内置OpenTelemetry集成用于分布式追踪与监控,并采用中间件概念拦截请求以实现功能扩展。这是一个重量级生产级框架。

03 模型交互框架

专注于封装大模型供应商的API调用,处理路由、错误重试、Token分析、响应反序列化等功能。通常可与流程编排框架集成。

ELL

GitHub: https://github.com/MadcowD/ell
开发语言: Python

一个轻量级提示工程框架,倡导“提示词即代码(Prompt as code)”。它以提示词函数为索引,并通过可视化日志追踪LLM调用表现,主要优势是提高代码可读性和便于后续分析。但项目近期迭代较少。

import ell

@ell.simple(model="gpt-4o")
def hello(world : str):
    """You are a helpful assistant that writes in lower case.""" # System Message
    return f"Say hello to {world[::-1]} with a poem."    # User Message

hello("sama")

图片

Strands

GitHub: https://github.com/strands-agents/sdk-python
开发语言: Python, Typescript

采用模型驱动方法构建和运行AI代理的SDK。它主要为开发者封装了模型调用、工具依赖注入和观察调试功能,将具体的Agent逻辑和编排交由开发者实现,在抽象粒度和自由度之间取得了较好平衡。

from strands import Agent
from strands_tools import calculator

agent = Agent(tools=[calculator])
agent("What is the square root of 1764")

以下是用Strands实现的一个简易版代码生成Agent(SWE-Agent思路),仅需约10行代码:

import subprocess, sys
from strands import Agent, tool
from strands.models.openai import OpenAIModel as OAI

@tool
def bash(cmd: str) -> str:
    """Run a bash command and returns results"""
    return subprocess.run(["bash", "-lc", cmd], capture_output=True)

Agent(tools=[bash], model=OAI(model_id="gpt-5.2"))(f"One-shot SWE agent: {sys.argv[1:]}")
Pydantic AI

GitHub: https://github.com/pydantic/pydantic-ai/
开发语言: Python

旨在将FastAPI式的开发体验带入GenAI应用。它从Pydantic的数据验证功能出发,对LLM输出结果进行结构化验证。其依赖注入设计非常直观(类似Golang风格),缓解了因工具增减而手动迭代提示词的压力,并附带完整的LLM日志追踪功能。

from dataclasses import dataclass
from pydantic import BaseModel, Field
from pydantic_ai import Agent, RunContext
from bank_database import DatabaseConn

@dataclass
class SupportDependencies:  
    customer_id: int
    db: DatabaseConn

class SupportOutput(BaseModel):  
    support_advice: str = Field(description='Advice returned to the customer')
    block_card: bool = Field(description="Whether to block the customer's card")
    risk: int = Field(description='Risk level of query', ge=0, le=10)

support_agent = Agent(  
    'openai:gpt-5',
    deps_type=SupportDependencies,
    output_type=SupportOutput,  
    instructions=(  
        'You are a support agent in our bank, give the '
        'customer support and judge the risk level of their query.'
    ),
)

@support_agent.instructions
async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:
    customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)
    return f"The customer's name is {customer_name!r}"

@support_agent.tool
async def customer_balance(
    ctx: RunContext[SupportDependencies], include_pending: bool) -> float:
    """Returns the customer's current account balance."""  
    return await ctx.deps.db.customer_balance(
        id=ctx.deps.customer_id,
        include_pending=include_pending,
    )

# ... 运行示例
async def main():
    deps = SupportDependencies(customer_id=123, db=DatabaseConn())
    result = await support_agent.run('What is my balance?', deps=deps)  
    print(result.output)  
    # support_advice='Hello John, your current account balance...' block_card=False risk=1

04 外部工具模板

提供安全、可复用的工具实现参考。这对于Agent应用的安全性至关重要,特别是执行bash、文件操作等命令时,需注意访问控制,避免危险操作。

stands-agents/tools

GitHub: https://github.com/strands-agents/tools

Strands的生态工具库,集成了多种常用工具的安全实现代码,可供参考或直接复用。

awesome-mcp-servers

GitHub: https://github.com/punkpeye/awesome-mcp-servers

收集了多语言的MCP(Model Context Protocol)服务器。每个服务器即是一个工具的标准化封装,当不确定某个工具如何安全实现时,可参考对应MCP服务器的代码。

05 低代码/无代码开发框架

支持通过拖拽等方式可视化编排LLM Agent工作流,无需编码或少量编码即可快速构建带前端界面的业务应用,通常集成多种业务模板。

Dify

GitHub: https://github.com/langgenius/dify

用于开发智能体工作流的生产就绪型平台,集成了AI工作流编排、RAG管道、模型管理、可观测性等功能。提供丰富的工作流模板,可一键导入部署。

图片

n8n

GitHub: https://github.com/n8n-io/n8n

强大的工作流自动化平台,支持低代码/无代码构建。能够与Slack等办公软件深度集成,在海外应用广泛。

图片

RAGFlow

GitHub: https://github.com/infiniflow/ragflow

深度文档理解为核心的RAG兼智能体引擎。其显著特性是集成了DeepDoc文档解析技术,能精确处理复杂PDF布局和表格。它结合了基于图的任务编排与可视化工作流编辑器,特别适合法律、医疗、金融等依赖深度文档分析的场景。

图片

Langflow

GitHub: https://github.com/langflow-ai/langflow

一个拖拽式构建和部署AI代理与工作流的可视化工具。

图片




上一篇:单片机C/汇编优化指南:结构、代码量与乘除法加速
下一篇:Dubbo服务降级核心模式解析:屏蔽与容错配置实战及面试要点
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 12:41 , Processed in 0.288225 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表