随着大语言模型(LLM)能力的不断提升,构建一个具备“推理 + 行动能力”的 AI Agent 成为开发者探索的新方向。与传统聊天机器人不同,Agent不仅能对话,还能调用工具、保存记忆、规划任务。
我决定从最小可行产品(MVP)出发,构建一个可以调用搜索工具、处理用户请求的AI Agent,并控制在100行Python代码以内。
主要基于基于Google Agent Development Kit (ADK)这套开发组件来实现。 如果你感兴趣,有一定的动手能力,也可以在此基础上上扩展成一个生产级别可用的产品。
为什么选 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运行器等。
实现过程
1. 定义工具接口和样例工具
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。
2. 构建记忆系统
classSimpleMemory:
def__init__(self):
self.history = []
defadd(self, role, content):
self.history.append({"role": role, "content": content})
defget(self):
return self.history
它可以存储过去对话,便于后续构建多轮记忆。
3. Agent核心逻辑
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替换硬编码工具选择逻辑。
4. 交互入口
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行以内,但却具备完整的工具调用逻辑,为构建更强大、可复用的智能体系统打下了基础。
670

被折叠的 条评论
为什么被折叠?



