随着大语言模型(LLM)能力的不断提升,构建一个具备“推理 + 行动能力”的 AI Agent 成为开发者探索的新方向。与传统聊天机器人不同,Agent不仅能对话,还能调用工具、保存记忆、规划任务。
我决定从最小可行产品(MVP)出发,构建一个可以调用搜索工具、处理用户请求的AI Agent,并控制在100行Python代码以内。
主要基于基于Google Agent Development Kit (ADK)这套开发组件来实现。 如果你感兴趣,有一定的动手能力,也可以在此基础上上扩展成一个生产级别可用的产品。
Google Agent Development Kit (ADK) 主打“工程级”多代理系统:
关键能力 | 说明 | 优势 |
---|---|---|
模型无关 | 支持所有主流LLM(Gemini为一等公民) | 轻松切换供应商,降低锁定 |
一键三端 | adk run / web / serve覆盖CLI、Web UI、REST | 原型→上线路径极短 |
调用链可视化 | 自动记录子代理调用、工具输出 | 便于调试与性能分析 |
如果你想在最小代码量内体验“拆分角色+工具调用+结果汇总”的完整闭环,ADK几乎是目前最快捷的选择。
依赖 | 版本/说明 |
---|---|
Python | ≥ 3.9(官方推荐3.10+) |
pip | ≥ 23 |
git | 可选,便于版本控制 |
Google账号 | 用于申请Gemini API Key |
操作系统 | Windows / macOS / Linux均可(示例以macOS/Linux shell为主) |
这个AI Agent系统分为四个核心模块:
模块 | 说明 |
---|---|
Tool | 所有“能力插件”的接口定义 |
Agent | 智能体主控类,负责理解输入、调用工具、生成响应 |
Memory | 简单的对话记忆模块,存储历史对话 |
Runner/Main | 命令行交互入口,接收用户输入并调用Agent |
我们首先设计了一个统一的Tool接口,所有工具只需实现.run(input: str)方法即可。这种模块化设计让我们可以后续轻松添加更多能力,比如PDF分析、Python运行器等。
classTool(ABC):
name: str
description: str
@abstractmethod
defrun(self, input: str) -> str:
pass
classGoogleSearchTool(Tool):
name = "google_search"
description = "使用Google搜索获取信息"
defrun(self, input: str) -> str:
returnf"搜索'{input}'的结果是:巴黎是法国的首都。"
你也可以将此替换为真实的Web搜索API。
classSimpleMemory:
def__init__(self):
self.history = []
defadd(self, role, content):
self.history.append({"role": role, "content": content})
defget(self):
return self.history
它可以存储过去对话,便于后续构建多轮记忆。
classAgent:
def__init__(self, tools):
self.tools = {tool.name: tool for tool in tools}
self.memory = SimpleMemory()
defthink(self, user_input: str) -> str:
self.memory.add("user", user_input)
# prompt构建(仅文本形式)
prompt = "你是AI助手,可调用这些工具:\n"
for t in self.tools.values():
prompt += f"- {t.name}: {t.description}\n"
prompt += f"用户问:{user_input}"
# 模拟LLM决策(这里硬编码为search)
selected_tool = "google_search"
if selected_tool in self.tools:
result = self.tools[selected_tool].run(user_input)
else:
result = "抱歉,暂时无法处理。"
self.memory.add("assistant", result)
return result
此处可以接入GPT-4等LLM替换硬编码工具选择逻辑。
if __name__ == "__main__":
tools = [GoogleSearchTool()]
agent = Agent(tools)
print("欢迎使用AI Agent!(输入exit退出)")
whileTrue:
user_input = input("你:")
if user_input.lower().strip() == "exit":
break
output = agent.think(user_input)
print("AI:" + output)
运行后,我们可以输入问题:
你:法国的首都是哪?
AI:搜索‘法国的首都是哪?’的结果是:巴黎是法国的首都。
虽然工具调用逻辑是模拟的,但整个智能体流程(接收输入 → 工具调用 → 输出结果)已完整跑通。
为了支持更多实际应用,我们可以进一步扩展:
功能 | 技术方向 |
---|---|
接入更多GPT模型 | 例如使用OpenAI API调用GPT-4 |
添加更多工具 | 如天气、文件处理、Python计算 |
多轮上下文记忆 | 引入token-aware memory(如LangChain Memory) |
Web前端或API | 使用Flask / FastAPI提供接口服务 |
多Agent协作 | 引入planner / AutoGen等支持agent之间协作 |
本项目展示了一个轻量级AI Agent系统的最小实现方式。虽然代码控制在了100行以内,但却具备完整的工具调用逻辑,为构建更强大、可复用的智能体系统打下了基础。
我们的官网
https://www.ai360labs.com
加入群聊
点击底部分享、赞和在看,把好内容传递出去!