手搓智能体,说起来有点狂妄,实际也不是不可能!🤔
要达到手搓智能体这一步,我们还差一个重要的知识点——智能体的“骨架”:ReAct框架。
前面聊过的RAG、Function Calling、MCP、Skills,是智能体的血肉;大语言模型是它的“大脑”;而ReAct这个骨架,才能真正撑起AI这个庞然大物。
🔍 什么是ReAct框架?
ReAct 全称 Reasoning + Acting(推理 + 行动),是普林斯顿 & 谷歌 2022 年提出的 AI 大模型智能体核心架构,也是当前 LLM Agent 最主流、最基础的设计范式。
它精准解决了原生LLM的痛点:只会空想、不会查外部信息、容易幻觉、无法分步解决复杂问题,让大模型像人类一样,循环解决问题:
📌 三大核心组件(TAO循环)
完整循环:Thought → Action → Observation → 重复,直到任务结束输出Answer。
1. Thought(思考/推理):LLM内部逻辑分析、任务拆解、规划下一步,比如理解用户问题、判断缺什么信息、制定计划。
2. Action(行动/执行):把思考变成可执行操作,调用工具(搜索网页、查数据库、API调用、代码执行等)。
3. Observation(观察/反馈):工具执行后的客观结果,作为下一轮思考的输入依据。
💡 不用从零搭建!
大家熟知的OpenClaw小龙虾,就是一个标准的智能体,直接使用AI 能力来完成任务的“数字员工”或助手。包括我前面用到的OpenCode也是,还有比较有影响力的Claude Code,一般我们直接去使用这些智能体就行了。
但某些专业领域或者企业,可能需要自己搭建智能体,定制用于专属领域或专属目的,就需要自己搭建智能体。即使需要搭建智能体,也是不需要从0到1的写,早就有人封装了ReAct框架等AI部件,实现了智能体的一些功能,你直接调用就行了。比如LangChain, 是一个供开发者使用的代码框架,可以基于它来开发AI应用;再如Dify,是一个面向更广泛用户的低代码应用开发平台,可以快速搭建出应用,开箱即用。🔥 实操环节:纯手写ReAct智能体(核心版)
今天不调用LangChain和Dify,直接按ReAct思想,实现一个超萌版智能体,看懂它的工作原理!
标准ReAct完整流程:
① Thought:大模型思考(比如“需要查XX,无实时信息,必须搜索”)
② Action:调用Search工具,搜索关键词
③ Observation:获取工具返回的真实数据
④ Thought:分析结果,信息足够则总结
⑤ Final Answer:输出最终答案
💻 纯Python手写核心代码(可直接复制运行)
import requests# ===================== 配置 =====================ALIYUN_API_KEY = "sk-3fa" #需要申请大模型api-keyBOCHA_API_KEY = "sk-ddb" #需要申请web搜索api-keyALIYUN_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"BOCHA_URL = "https://api.bocha.cn/v1/web-search"# ===================== 思考函数 =====================def think(question: str, history: str) -> str: print("🤖 正在思考...") payload = { "model": "qwen3.6-plus", "messages": [{ "role": "user", "content": f"""你是ReAct智能体,按格式输出下一步思考与行动。用户问题:{question}历史记录:{history}规则:1. 若信息不足 → 输出:Action: Search[查询词]2. 若信息足够 → 输出:Finish: [最终答案]""" }], "temperature": 0 } headers = { "Authorization": f"Bearer {ALIYUN_API_KEY}", "Content-Type": "application/json" } resp = requests.post(ALIYUN_URL, headers=headers, json=payload) return resp.json()["choices"][0]["message"]["content"].strip()# ===================== 搜索 ============================def web_search(query: str) -> str: print(f"🔍 正在搜索:{query}") headers = { "Authorization": f"Bearer {BOCHA_API_KEY}", "Content-Type": "application/json" } data = { "query": query, "summary": True, "freshness": "noLimit", "count": 2 } resp = requests.post(BOCHA_URL, headers=headers, json=data) # 只取1000字符,加快处理 return str(resp.json())[:1000]# ===================== ReAct 主循环 =====================def react_agent(question: str): history = "" print(f"\n📌 问题:{question}\n") for step in range(1, 4): print(f"=== 第 {step} 轮 ReAct ===") thought = think(question, history) print(f"思考结果:{thought}") if "Finish:" in thought: ans = thought.split("Finish:")[-1].strip() print(f"\n✅ 最终答案:{ans}") return try: query = thought.split("Search[")[1].split("]")[0] except: query = question res = web_search(query) print(f"搜索结果:{res}\n") history += f"\n{thought}\n搜索结果:{res}"# ===================== 启动 =====================if __name__ == "__main__": user_q = input("请输入问题:") react_agent(user_q)
📝 运行测试
运行后,输入问题:“华为手机最新的型号是什么?”,经过两轮ReAct循环,即可输出答案。
小遗憾:目前仅能搜索到2025年信息,若添加“获取当前时间”工具,带上2026年时间查询,结果会更精准~
其实只要再增加工具调用、MCP调用、数据库调用,这个简单的智能体,就能升级成能处理复杂任务的“超级助手”!
智能体的厉害之处,就在于它会不停循环“思考→行动→观察→再思考”,给它一个目标,不达目的不罢休,比优秀员工还靠谱!💪
你想让这个智能体解决什么问题?评论区留言~一起解锁智能体的更多玩法!
#AI智能体 #ReAct框架 #Python实操 #手搓AI智能体 #LLMAgent