三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

AI Agent白手起家77: 从基础认知到多智能体实战的全景回顾

AI Agent白手起家77: 从基础认知到多智能体实战的全景回顾

纲要

  • AI Agent开发基础认知
    • 大模型概率预测本质与局限性
    • 提示词工程与模型编排的必要性
  • 核心框架与生态
    • LangChain:模型编排与LCEL
    • LangGraph:工业级多智能体方案
    • CrewAI:配置化快速搭建多智能体
    • 可观测性平台LangSmith
  • 关键技术领域
    • RAG检索增强生成与检索策略平衡
    • 记忆管理Memory与多轮对话上下文优化
    • 向量数据库选型与配置
    • 模型部署:本地 vs 云端 API 成本对比
  • 实战案例速览
    • 单智能体钉钉助手
    • 多智能体数字人 + 实时语音
    • 生成类应用(代码/提示词/游戏/营销策略)
  • 学习重难点拆解
    • 重点:LCEL轻量编排、LangGraph生产级协作
    • 难点:检索策略调优、记忆生命周期管理、环境配置
  • 未来展望
    • 人机协同成为标配
    • 互联网访问主体从人转向Agent
    • 超级终端 +MCP协议驱动下一代互联网
    • SaaS服务被智能体重构
    • 模型成本趋近免费,数据成为新石油

技术全景回顾

在进入智能体开发的世界之前,有必要理解大模型的概率预测本质。当前基于Transformer架构的模型通过统计模式生成内容,它并非真正“理解”世界,而是在给定上下文中预测最可能的下一个词。这一特性决定了两个重要结论:

  1. 大模型在垂直领域入门级任务上表现出色,但高级推理仍需要人类介入;
  2. 智能体开发的核心不是“写出完美提示词”,而是通过编排、检索、记忆、工具调用弥补模型自身的不足。

本文从零开始,梳理构建一个生产可用的 AI Agent 所需的关键技术栈,并给出可直接运行的代码示例,帮助新手跨越从理论到实践的门槛。

核心框架:从 LangChain 到 CrewAI

LangChain 与 LCEL

LangChain是目前应用最广泛的 AI 应用开发框架,其设计哲学是用链式调用和组件化封装,让大模型快速嵌入传统应用。其中LCEL(LangChain Expression Language)是一种声明式的链构建方式,可以看作轻量版的LangGraph。它允许开发者使用管道符|串联提示词、模型调用、输出解析器等组件,简洁且易于集成到任意场景。

以下是一个基于LCEL的简单智能体:接收用户输入,调用大模型并结构化输出任务列表。

# lcel_demo.pyimportosfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_openaiimportChatOpenAIfromlangchain_core.output_parsersimportPydanticOutputParserfrompydanticimportBaseModel,FieldfromtypingimportListfromdotenvimportload_dotenv load_dotenv()# 加载 .env 文件中的 OPENAI_API_KEY# 定义期望的输出结构classTaskList(BaseModel):tasks:List[str]=Field(description="待办任务列表")priority:str=Field(description="优先级: high/medium/low")parser=PydanticOutputParser(pydantic_object=TaskList)# 构建提示词模板prompt=ChatPromptTemplate.from_messages([("system","你是一个任务规划助手。请根据用户输入生成任务列表。\n{format_instructions}"),("user","{input}")])prompt=prompt.partial(format_instructions=parser.get_format_instructions())# 选择模型model=ChatOpenAI(model="gpt-3.5-turbo",temperature=0)# 构建链chain=prompt|model|parser# 运行if__name__=="__main__":user_input="我需要准备一次技术分享,关于AI Agent"result=chain.invoke({"input":user_input})print(result)

运行方式:在.env文件中配置OPENAI_API_KEY,然后执行python lcel_demo.py。这个链式结构就是LCEL的核心用法,掌握后可以无缝嵌入到任何需要调用大模型的场景。

LangGraph:工业级多智能体协作

当单智能体无法满足复杂商业需求时,就需要多智能体协同。LangGraphLangChain基础上引入有状态图(StateGraph)的概念,用节点(Node)表示智能体或函数,边(Edge)定义控制流。它原生支持检查点(Checkpointer)和人机交互中断,适合生产环境。

典型的LangGraph工作流:

接收用户输入

意图识别节点

需要工具?

调用搜索工具

生成回答

输出最终结果

持久化记忆

由于篇幅限制,此处不展开完整代码,但关键实现步骤包括:

  1. 定义状态字典AgentState
  2. 创建节点函数(如call_model,should_continue);
  3. 构建StateGraph并编译为可运行实例;
  4. 使用MemorySaver实现多轮对话记忆。

LangGraph的陡峭学习曲线换来的是高度可控的协作流,这是生产落地的重点方向。

CrewAI:配置化多智能体快速搭建

CrewAI则是另一个极端:通过 YAML 配置文件定义智能体角色、目标和工具,几乎“开箱即用”。它内部封装了LangChain等组件,适合快速原型验证,但深度定制时反而不如LangGraph灵活。

以下是一个使用CrewAI构建的产品分析团队示例:

# crew_demo.pyfromcrewaiimportAgent,Task,Crew,Processfromcrewai_toolsimportSerperDevToolimportos os.environ["OPENAI_API_KEY"]="your-api-key"os.environ["SERPER_API_KEY"]="your-serper-key"# 搜索工具API# 定义工具search_tool=SerperDevTool()# 定义智能体market_researcher=Agent(role="市场研究员",goal="分析{product}的市场趋势和竞争对手",backstory="你是一位经验丰富的市场分析专家,善于从数据中提炼洞察。",tools=[search_tool],verbose=True)strategist=Agent(role="战略分析师",goal="基于市场研究结果,制定{product}的上市策略",backstory="你曾在顶尖咨询公司任职,擅长将信息转化为行动方案。",verbose=True)# 定义任务task1=Task(description="收集并总结{product}的市场最新动态、主要竞争对手和用户反馈。",expected_output="一份包含市场规模、竞品列表和关键趋势的报告。",agent=market_researcher)task2=Task(description="根据市场报告,制定{product}的差异化策略和推广渠道。",expected_output="包含目标人群、核心卖点、推广步骤的策略文档。",agent=strategist)# 组建团队crew=Crew(agents=[market_researcher,strategist],tasks=[task1,task2],process=Process.sequential)if__name__=="__main__":result=crew.kickoff(inputs={"product":"AI智能音箱"})print(result)

运行该脚本前需要安装crewaicrewai_tools,并申请对应的 API 密钥。CrewAI的优点是极低的入门门槛,但它对底层模型的自定义(如使用国内代理)需要修改其内部LiteLLM配置,这是新手容易碰壁的地方。


关键技术领域

RAG 检索增强生成

RAG不是智能体的必需品,但能让智能体“学会”私有数据。其难点并非搭建流程,而在于检索策略的平衡——既要保证召回准确度,又要控制上下文长度。常见优化手段包括:

  • 混合检索(向量 + 关键字)
  • 重排序(Rerank)
  • 查询改写(Query Rewriting)

一个迷你RAG示例,使用Chroma作为向量库:

# mini_rag.pyfromlangchain_community.document_loadersimportTextLoaderfromlangchain_text_splittersimportRecursiveCharacterTextSplitterfromlangchain_community.embeddingsimportHuggingFaceBgeEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain.chainsimportRetrievalQAfromlangchain_openaiimportChatOpenAI# 1. 加载并分割文档loader=TextLoader("knowledge.txt",encoding="utf-8")docs=loader.load()text_splitter=RecursiveCharacterTextSplitter(chunk_size=200,chunk_overlap=50)splits=text_splitter.split_documents(docs)# 2. 创建向量库embedding=HuggingFaceBgeEmbeddings(model_name="BAAI/bge-small-zh")vectorstore=Chroma.from_documents(documents=splits,embedding=embedding,persist_directory="./chroma_db")# 3. 构建问答链retriever=vectorstore.as_retriever(search_kwargs={"k":3})qa_chain=RetrievalQA.from_chain_type(llm=ChatOpenAI(model="gpt-3.5-turbo"),retriever=retriever,return_source_documents=True)# 4. 提问question="什么是AI Agent?"result=qa_chain.invoke({"query":question})print(result["result"])

记忆管理

Memory的难点同样与RAG相通:如何在多轮对话中维护有效信息,同时防止上下文无限膨胀。常用策略包括:

  • 短期记忆:保留最近k轮对话
  • 长期记忆:将关键信息摘要或存入向量库
  • 混合策略:用LangGraph的检查点机制持久化状态

向量数据库选型

对新手而言,向量数据库的安装配置是一大障碍。推荐入门路径:

数据库特点适用场景
Chroma纯 Python,轻量,零配置本地开发、原型验证
FAISSMeta 出品,性能极高大规模向量检索
Milvus分布式,支持云原生企业级生产环境

Chroma起步,后续按需迁移,可以避开大部分环境配置陷阱。

模型部署:本地还是云端?

许多开发者的第一反应是“在自己电脑跑一个模型”。这并非不可行,但需要算清楚经济账。下表给出一个简单对比:

方式硬件成本推理延迟适用场景
本地部署 Ollama + qwen2一台 16GB 内存的 PC秒级离线环境、敏感数据
云端 API(如 DeepSeek)按 token 付费毫秒级高并发、快速迭代
自建 GPU 服务器数万元起毫秒级内部平台长期服务

选择策略:对于大多数原型和中小规模应用,使用 API 更为经济;只有当数据安全要求极高或已具备硬件资源时,才考虑本地部署。

学习重点与难点

两大重点

  • LCEL:轻量、无侵入,是融入现有系统的首选方案;
  • LangGraph:生产级多智能体的基石,掌握后能应对绝大多数商业需求。

三大难点

  1. 检索策略调优:没有银弹,需要反复实验;
  2. 记忆管理:决定智能体是否“聪明”的关键;
  3. Python 环境配置:常卡住新手,建议使用condapipenv隔离环境,遇到问题优先查阅官方文档或询问 AI。

展望:Agent 时代的黎明

未来几年,几个趋势将深刻改变技术生态:

  • 人机协同成为标配:不使用 AI 编程的开发者会被淘汰,就像工业革命中的手工作坊;
  • 互联网主体迁移:Agent 产生的流量将超过人类,每个 Agent 都需要搜索工具感知世界;
  • 超级终端 + MCP 协议:类似ChatGPT Desktop豆包这样的入口将重塑信息获取方式,后端通过MCP(Model Context Protocol)连接各类 Agent 服务;
  • SaaS 重构:大量表单操作将被自然语言对话取代,“会议预定”、“报表生成”只需一句话;
  • 模型成本趋近免费:竞争使推理价格持续走低,大模型将成为水电一样的基础设施,而数据将成为新石油——拥有独特数据集就意味着不可替代的模型能力。

个人开发者应当尽早拥抱这些变化,培养终身学习能力与独立思考的习惯,因为在一个 AI 泛滥的时代,甄别信息对错的能力比编写代码本身更加珍贵。

← 返回列表