AI Agent 实验框架
从 GitHub 前沿项目提炼的轻量 AI Agent 骨架:ReAct 推理循环 + 工具注册 + 简易记忆,未完成但有研究价值。
项目简介
AI Agent 的核心范式是 ReAct(Reasoning + Acting):大模型推理出下一步行动,调用工具,再根据结果继续推理。本框架是 GitHub 实验项目的极简复刻,重点理解循环结构与工具抽象。
代码示例:ReAct 循环骨架
py
from typing import Callable, Dict, List
class Agent:
def __init__(self, llm: Callable[[str], str]):
self.llm = llm # 可替换为 OpenAI/本地模型接口
self.tools: Dict[str, Callable] = {}
self.memory: List[str] = []
def register_tool(self, name: str, fn: Callable):
self.tools[name] = fn
def run(self, task: str, max_steps: int = 6) -> str:
prompt = "任务: " + task + " 可用工具: " + str(list(self.tools)) + " 开始。"
for _ in range(max_steps):
action = self.llm(prompt) # 模型输出: Thought / Action / Input
if "FINAL:" in action:
return action.split("FINAL:", 1)[1].strip()
name, arg = parse_action(action)
if name in self.tools:
result = self.tools[name](arg)
self.memory.append(name + "(" + arg + ") -> " + str(result))
prompt += " 工具结果: " + str(result) + " 继续推理。"
return "超时,未完成任务"
def parse_action(s: str):
parts = s.split("(", 1)
if len(parts) > 1:
return parts[0], parts[1].rstrip(")")
return parts[0], ""
if __name__ == "__main__":
def fake_llm(p):
return "FINAL: 演示完成" # 替换为真实 LLM
agent = Agent(fake_llm)代码示例:工具与记忆模块
py
import datetime
def get_time(_arg: str) -> str:
return datetime.datetime.now().isoformat()
def search_web(query: str) -> str:
# 接 requests 调用搜索 API;此处返回占位
return "[web] 关于 " + query + " 的搜索结果占位"
agent = Agent(lambda p: "FINAL: done")
agent.register_tool("get_time", get_time)
agent.register_tool("search_web", search_web)
# 记忆可直接持久化到 JSONL,实现跨会话记忆待完成方向
- 工具调用输出改为 JSON Schema 严格校验,避免解析漂移。
- 加入规划器(Planner)+ 执行器(Executor)分离的 Plan-and-Execute 结构。
- 记忆增加向量检索(FAISS / Chroma),支持长程上下文。
- 接入真实 LLM 后跑通多工具编排的完整 Demo。
操作步骤
pip install openai或本地模型,把fake_llm替换为真实调用。- 先跑通“任务→行动→工具→结果”的最小循环,再加第二个工具。
- 观察 ReAct 提示词设计对结果稳定性的影响,迭代 prompt 模板。
来源参考
GitHub 关键词:react-agent-framework、langchain-mini、tool-agent-demo(链接可替换为实际仓库地址)。