快速上手:不到100行代码,构建具备工具调用能力的AI Agent

2025-04-25 03:50:28技术分享

随着大语言模型(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行以内,但却具备完整的工具调用逻辑,为构建更强大、可复用的智能体系统打下了基础。

 

我们的官网

https://www.ai360labs.com


 

加入群聊

点击底部分享、赞和在看,把好内容传递出去!