一、LangChain:AI应用的"瑞士军刀"

核心设计理念

LangChain的核心是模块化设计链式编排。它通过将复杂的AI应用拆解为可复用的组件,让开发者能够像搭积木一样构建应用。

上手步骤

1. 基础环境搭建
# 安装
pip install langchain langchain-openai

# 基础配置
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain

# 初始化模型
llm = ChatOpenAI(model="gpt-4", temperature=0.7)
2. 第一个简单应用:问答系统
# 创建提示模板
prompt = ChatPromptTemplate.from_template(
    "用中文回答:{question}"
)

# 创建链
chain = LLMChain(llm=llm, prompt=prompt)

# 执行
result = chain.run("什么是机器学习?")
print(result)
3. RAG系统构建
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 1. 加载文档
loader = TextLoader("知识库.txt")
documents = loader.load()

# 2. 分割文本
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
docs = text_splitter.split_documents(documents)

# 3. 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)

# 4. 创建检索链
from langchain.chains import RetrievalQA

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

# 5. 提问
answer = qa_chain.run("文档中提到了哪些关键技术?")
4. 智能体开发(使用LangGraph)
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator

# 定义状态
class AgentState(TypedDict):
    messages: Annotated[list, operator.add]
    next_step: str

# 创建节点
def search_node(state: AgentState):
    # 搜索逻辑
    return {"messages": ["搜索完成"], "next_step": "analyze"}

def analyze_node(state: AgentState):
    # 分析逻辑
    return {"messages": ["分析完成"], "next_step": END}

# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("search", search_node)
workflow.add_node("analyze", analyze_node)
workflow.add_edge("search", "analyze")
workflow.set_entry_point("search")

# 编译并运行
app = workflow.compile()
result = app.invoke({"messages": [], "next_step": "search"})

设计原理

LangChain的设计核心是组合性(Compositionality)和声明式编程。主要组件包括:

  1. Models: LLM接口抽象

  2. Prompts: 提示词管理

  3. Chains: 任务编排(顺序链、检索链等)

  4. Agents: 工具调用决策

  5. Memory: 对话状态管理

  6. Indexes: 文档检索系统

相关论文

  • ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al., 2022)

  • Chain-of-Thought Prompting (Wei et al., 2022)

  • Retrieval-Augmented Generation (Lewis et al., 2020)


二、AutoGen:多智能体协作框架

核心设计理念

AutoGen采用对话编程(Conversational Programming)范式,通过定义多个具有特定角色的智能体,让它们通过对话协作解决问题。

上手步骤

1. 基础配置
pip install pyautogen

import autogen
from autogen import AssistantAgent, UserProxyAgent

# 配置LLM
config_list = [
    {
        "model": "gpt-4",
        "api_key": "your-key"
    }
]
2. 创建两个智能体的对话
# 创建编码助手
assistant = AssistantAgent(
    name="Coder",
    system_message="你是一个Python专家,负责编写代码",
    llm_config={"config_list": config_list}
)

# 创建用户代理(可以执行代码)
user_proxy = UserProxyAgent(
    name="User",
    human_input_mode="NEVER",  # 不等待人工输入
    code_execution_config={"work_dir": "coding"}
)

# 发起任务
user_proxy.initiate_chat(
    assistant,
    message="写一个Python函数,计算斐波那契数列的前n项"
)
3. 多智能体协作(代码审查场景)
# 创建三个不同角色的智能体
coder = AssistantAgent(
    name="Coder",
    system_message="编写高效、可读的代码",
    llm_config={"config_list": config_list}
)

reviewer = AssistantAgent(
    name="Reviewer",
    system_message="检查代码质量、潜在bug和优化建议",
    llm_config={"config_list": config_list}
)

tester = AssistantAgent(
    name="Tester",
    system_message="编写测试用例,确保代码正确性",
    llm_config={"config_list": config_list}
)

# 用户代理协调整个过程
user_proxy = UserProxyAgent(
    name="Manager",
    max_consecutive_auto_reply=10,
    human_input_mode="TERMINATE",
    code_execution_config={"work_dir": "coding"}
)

# 定义群组聊天
from autogen import GroupChat, GroupChatManager

groupchat = GroupChat(
    agents=[user_proxy, coder, reviewer, tester],
    messages=[],
    max_round=12
)

manager = GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list})

# 启动协作
user_proxy.initiate_chat(
    manager,
    message="我们需要一个股票数据分析工具,请协作完成"
)
4. 自定义工具集成
import requests

# 定义自定义工具
def get_stock_price(symbol: str):
    """获取股票价格"""
    # 模拟API调用
    return f"{symbol} 当前价格: $150.25"

# 注册工具
from autogen import register_function

register_function(
    get_stock_price,
    caller=assistant,  # 哪个智能体可以调用
    executor=user_proxy,  # 哪个智能体执行
    name="get_stock_price",
    description="获取指定股票代码的当前价格"
)

# 现在智能体可以自动使用这个工具
user_proxy.initiate_chat(
    assistant,
    message="请获取AAPL和GOOGL的股票价格,并计算总价值"
)

设计原理

AutoGen的核心是对话状态机角色定义

  1. 对话管理:维护完整的对话历史

  2. 角色专业化:每个智能体有明确的系统提示

  3. 自动工具调用:根据对话上下文自动选择合适的工具

  4. 代码执行:支持在沙箱中运行生成的代码

相关论文

  • AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation (Wu et al., 2023)

  • Communicative Agents for Software Development (Qian et al., 2023)

  • The Rise and Potential of Large Language Model Based Agents (Xi et al., 2023)


三、CrewAI:企业级任务编排框架

核心设计理念

CrewAI采用企业组织架构的隐喻,将任务分解、分配、执行和汇总过程结构化,特别强调角色明确性任务依赖性

上手步骤

1. 环境设置
pip install crewai crewai-tools

import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
2. 创建市场调研团队
# 定义工具
search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()

# 创建研究员智能体
researcher = Agent(
    role="市场研究员",
    goal="深入研究行业趋势和竞争对手",
    backstory="你是资深市场分析师,擅长发现市场机会",
    tools=[search_tool, scrape_tool],
    verbose=True,
    allow_delegation=False
)

# 创建策略师智能体
strategist = Agent(
    role="商业策略师",
    goal="基于研究数据制定商业策略",
    backstory="你是经验丰富的商业顾问,擅长制定可行策略",
    tools=[search_tool],
    verbose=True,
    allow_delegation=False
)

# 创建报告员智能体
writer = Agent(
    role="报告撰写专家",
    goal="将研究和策略转化为专业报告",
    backstory="你是技术文档专家,擅长编写清晰专业的商业报告",
    verbose=True,
    allow_delegation=False
)
3. 定义任务和依赖关系
# 研究任务
research_task = Task(
    description="""调研2024年AI智能体框架的发展趋势,
    重点关注LangChain、AutoGen、CrewAI三个框架。
    收集:1.市场份额数据 2.技术特点 3.用户反馈""",
    expected_output="详细的调研报告,包含数据来源和关键发现",
    agent=researcher,
    output_file="research_findings.md"
)

# 分析任务(依赖研究任务)
analysis_task = Task(
    description="""基于调研结果,分析三个框架的:
    1.竞争优势 2.市场机会 3.潜在风险
    为初创公司推荐最适合的框架""",
    expected_output="包含SWOT分析和具体建议的策略报告",
    agent=strategist,
    context=[research_task]  # 明确依赖关系
)

# 报告任务(依赖前两个任务)
report_task = Task(
    description="""综合研究和分析结果,撰写一份给CEO的
    商业决策报告,包含:执行摘要、详细分析、推荐方案""",
    expected_output="专业的企业报告(约2000字)",
    agent=writer,
    context=[research_task, analysis_task]
)
4. 创建并执行团队
# 组建团队
ai_crew = Crew(
    agents=[researcher, strategist, writer],
    tasks=[research_task, analysis_task, report_task],
    process=Process.sequential,  # 顺序执行
    verbose=True
)

# 执行任务
result = ai_crew.kickoff()
print("最终报告:\n", result)
5. 高级功能:层级式团队
# 创建子团队(专门处理技术调研)
tech_researcher = Agent(
    role="技术研究员",
    goal="深度分析框架的技术实现",
    backstory="你是软件架构师,擅长技术细节分析",
    tools=[scrape_tool],
    verbose=True
)

tech_analysis_task = Task(
    description="分析三个框架的架构设计、性能特点",
    expected_output="技术架构对比报告",
    agent=tech_researcher
)

# 主团队协调子团队
manager = Agent(
    role="项目经理",
    goal="协调所有研究任务,确保按时交付",
    backstory="你是资深项目经理,擅长资源调配",
    verbose=True
)

# 使用层级式流程
hierarchical_crew = Crew(
    agents=[manager, researcher, strategist, writer, tech_researcher],
    tasks=[research_task, tech_analysis_task, analysis_task, report_task],
    process=Process.hierarchical,
    manager_agent=manager,
    verbose=True
)

设计原理

CrewAI的设计核心是组织隐喻

  1. 角色定义模板

Agent = {
    "role": "明确的职能描述",
    "goal": "可衡量的目标",
    "backstory": "赋予上下文和动机",
    "tools": "可用的能力",
    "allow_delegation": "是否允许委派任务"
}
  1. 任务依赖图:通过context参数显式定义任务依赖关系

  2. 流程控制

    • sequential: 顺序执行

    • hierarchical: 层级管理

    • consensus: 共识决策

  3. 记忆管理:每个Agent有自己的短期记忆,Crew有共享的长期记忆

相关论文

  • CrewAI: Orchestrating Role-Playing Agents for Complex Task Solving (CrewAI Team, 2024)

  • Task-Driven Autonomous Agent (Yohei et al., 2023)

  • Hierarchical Planning and Task Decomposition in Multi-Agent Systems (Durfee, 1999)


四、对比总结与选择指南

特性对比

特性 LangChain AutoGen CrewAI
学习曲线 中等 较陡 平缓
多智能体支持 需要LangGraph 原生强大 原生强大
企业集成 需自定义 一般 优秀
任务编排 基于图 基于对话 基于角色
社区生态 最丰富 快速增长 专注企业
适合场景 技术探索、复杂RAG 学术研究、代码协作 企业流程、商业分析

实战建议

  1. 起步学习:从LangChain开始,理解基础概念

  2. 多智能体项目

    • 学术/研究:选AutoGen

    • 商业/企业:选CrewAI

  3. 生产部署

    • 已有系统集成:LangChain

    • 新建企业系统:CrewAI

    • 研究原型:AutoGen

进阶学习路径

  1. 第一阶段(1-2周)

    • LangChain基础 + 简单RAG系统

    • 理解Chain、Agent、Memory概念

  2. 第二阶段(2-3周)

    • AutoGen多智能体对话

    • 实现代码审查流程

    • CrewAI角色定义和任务编排

  3. 第三阶段(3-4周)

    • 混合使用框架

    • 性能优化和监控

    • 部署到生产环境

生产注意事项

  1. 成本控制

    • 设置token限制

    • 使用缓存机制

    • 选择合适的模型层级

  2. 错误处理

# 通用错误处理模式
try:
    result = agent.run(task)
except RateLimitError:
    # 重试逻辑
    pass
except TimeoutError:
    # 超时处理
    pass
  1. 监控和日志

    • 记录所有LLM调用

    • 监控token使用

    • 跟踪任务执行时间

这些框架各有侧重,选择时最重要的是匹配你的具体需求和技术栈。建议先从小型原型开始,逐步扩展到复杂系统。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐