智能体来了我用36小时从0到1,实现了能自动处理任务的AI智能体

4 阅读7分钟

(前言:用个人故事和成果开场,建立共鸣)
最近AI智能体(Agent)的概念火得不行,各种框架和产品看得人眼花缭乱。作为一个喜欢动手的开发者,我心里一直痒痒的:抛开那些复杂的包装,一个能真正执行任务的智能体,到底该怎么从零搭起来?

上周末,我花了大概36个小时,从读文档、搭环境、踩坑到调试,终于搞出了一个能理解我的自然语言指令,并自动执行多步任务的Demo智能体。它虽然不复杂,但完整走通了“感知-规划-执行”的闭环。

我把整个过程和核心代码梳理了出来,如果你也对Agent的实现原理感兴趣,想自己动手做一个,这篇笔记应该能帮你节省大量时间。

一、先明确目标:我们要做一个什么样的智能体?

在动手写第一行代码之前,定义清晰的目标至关重要。我不想做一个“聊天机器人”,而是希望它能主动完成任务

我设定的Demo目标是: “帮我分析今日热点,并总结成一份简报”

这个任务需要智能体:

  1. 感知:理解我的指令是获取并总结热点。
  2. 规划:拆解步骤(搜索热点 → 获取内容 → 分析总结 → 格式化输出)。
  3. 执行:调用不同的工具(搜索工具、爬虫工具、文本分析工具)按步骤执行。
  4. 反思:检查结果是否完整,是否需要调整。

二、技术选型:为什么是 LangChain + DeepSeek?

市面上框架很多(LangChain, LlamaIndex, Semantic Kernel等),我优先选择了 LangChain,原因很简单:

  • 生态成熟:社区活跃,文档和样例多,遇到问题容易找到解决方案。
  • 工具链丰富:内置和社区提供了大量现成的Tool(搜索、计算、API调用等),能快速搭建。
  • 抽象层次合理:它提供了Agent、Tool、Memory等核心概念的清晰抽象,既不会太底层,也不会太黑盒。

对于大模型(LLM),我选择了 DeepSeek,理由也很直接:

  • 能力强且免费:在代码和逻辑推理上表现不错,完全满足Demo需求,没有额度焦虑可以随便“造”。
  • API友好:接入简单,响应速度快。

三、实战拆解:代码是如何一步步实现的

这里我剥离了项目结构,聚焦最核心的链路。完整项目代码已放在文末的GitHub仓库里。

第一步:搭建智能体的“大脑” (LLM + Prompt)

智能体的核心是一个能进行任务规划和链式思考的LLM。LangChain的 create_react_agent 帮我们封装了复杂的Prompt工程。

python

from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain_community.llms import DeepSeek

# 1. 初始化大脑(LLM)
llm = DeepSeek(model="deepseek-chat", temperature=0.1) # temperature调低,让输出更稳定

# 2. 拉取一个优化过的ReAct提示模板(这是LangChain的神器之一)
prompt = hub.pull("hwchase17/react")

第二步:为智能体打造“工具箱” (Tools)

智能体之所以能“执行”,靠的就是Tools。我给它配备了三个基础工具:

python

# 工具1:网络搜索(模拟)
def search_web(query: str) -> str:
    """模拟搜索今日热点。实际可接入SerperAPI或Google Search API。"""
    print(f"[智能体正在搜索]: {query}")
    # 这里是模拟数据,真实情况调用API
    mock_hot_news = [
        "AI编程助手CodeGeeX发布4.0版本,宣称效率提升50%",
        "深度学习框架PyTorch宣布官方支持Apple Silicon GPU加速",
        "2024年DevOps状态报告:AI在自动化测试中渗透率超30%"
    ]
    return "\n".join(mock_hot_news)

# 工具2:内容提取(模拟)
def fetch_content(url: str) -> str:
    """模拟根据链接获取详细内容。"""
    print(f"[智能体正在抓取内容]: {url}")
    return f"这是关于'{url}'的详细报道内容摘要..."

# 工具3:文本总结
def summarize_text(text: str) -> str:
    """调用LLM对长文本进行总结。"""
    print(f"[智能体正在总结内容]...")
    # 这里实际上可以再调一次LLM,为简化,直接返回模拟总结
    return f"核心要点:{text[:50]}..."

# 将函数包装成LangChain Tool
tools = [
    Tool(name="Search", func=search_web, description="当你需要获取最新热点或搜索信息时使用此工具。"),
    Tool(name="FetchContent", func=fetch_content, description="当你需要获取某个链接的具体内容时使用此工具。"),
    Tool(name="Summarizer", func=summarize_text, description="当你需要总结长文本内容时使用此工具。"),
]

第三步:组装并运行智能体

把大脑、工具和提示词组装起来,智能体就诞生了。

python

# 3. 创建ReAct智能体
agent = create_react_agent(llm, tools, prompt)

# 4. 创建执行器,它会处理智能体的思考循环
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)

# 5. 发布任务!
result = agent_executor.invoke({
    "input": "请帮我分析今天的科技热点,并整理成一份简短的要点简报。"
})

print("\n" + "="*50)
print("【智能体生成的最终简报】")
print(result["output"])
print("="*50)

四、运行效果与核心洞察

当你运行上面的代码(记得安装依赖并填入自己的API Key),会在控制台看到类似下面的思考过程

text

> 进入新的AgentExecutor链...
思考:用户需要一份今日科技热点简报。我需要先搜索热点,然后获取详细信息,最后总结。
行动:Search
行动输入:今日科技热点
[智能体正在搜索]: 今日科技热点
观察:AI编程助手CodeGeeX发布4.0版本... (省略)
思考:我得到了几条热点标题,需要获取其中一两条的详细内容来总结。
行动:FetchContent
行动输入:AI编程助手CodeGeeX发布4.0版本
[智能体正在抓取内容]: AI编程助手CodeGeeX发布4.0版本
观察:这是关于'AI编程助手...'的详细报道内容摘要...
思考:现在我有了一些细节,可以开始总结了。
行动:Summarizer
行动输入:[将搜索和抓取的内容组合]
[智能体正在总结内容]...
观察:核心要点:AI编程助手效率提升...
思考:我已经完成了热点搜索、内容获取和总结,可以给出最终答案了。
最终答案:根据今日热点,为您整理简报如下:1. AI编程助手CodeGeeX 4.0发布... (省略)

通过这个Demo,我清晰地验证了几个关键点:

  1. 智能体的本质是“规划+执行”循环:它通过LLM进行动态的任务拆解(规划),并选择合适的工具执行。
  2. 工具(Tools)是能力边界:智能体能做什么,完全取决于你给它提供了什么工具。赋予它联网搜索、执行代码、操作系统的能力,它就能变得无比强大。
  3. Prompt是灵魂hwchase17/react 这个Prompt模板已经嵌入了“Thought/Action/Observation”的格式,引导LLM进行正确推理。微调Prompt能极大改善表现。

五、踩坑与优化建议

  1. 无限循环坑:智能体有时会陷入“思考-行动”死循环。务必在AgentExecutor中设置max_iterations参数(比如10-15次),强制退出。
  2. 工具描述坑Tooldescription至关重要!LLM完全依赖描述来决定是否调用该工具。描述要清晰、具体,说明适用场景
  3. 错误处理坑:工具执行可能失败(如网络超时),需要在工具函数内部做好异常处理,并返回清晰的错误信息给LLM,让它能调整策略。
  4. 成本与延迟坑:每次思考和行动都可能调用LLM,复杂任务成本不低。Demo阶段可以使用DeepSeek这类性价比高的模型,上线前需做好预算和延迟评估。

最后,聊聊“从0到1”之后的事

这个Demo只是一个起点。当你掌握了这个最小闭环,就可以尝试:

  • 接入真实工具:替换掉模拟工具,接入SerperAPI(搜索)、Requests(爬虫)、ShellTool(执行命令)。
  • 尝试多智能体协作:让一个“主管”智能体协调多个“工人”智能体分工合作。
  • 加入记忆(Memory) :让智能体记住之前的对话和结果,实现更连贯的长期任务。

技术本身不是目的,解决问题才是。  动手搭建一次,你对所有那些“神奇”的Agent产品的理解,会完全不一样。