虽然“函数调用”准确描述了调用特定预定义代码函数的过程,但更广义的“工具调用”概念更具包容性。工具不仅可以是传统函数,还可以是复杂的 API 接口、数据库请求,甚至是面向其他智能体的指令。这样可以构建更复杂的系统,例如主智能体将数据分析任务委托给专门的“分析智能体”,或通过 API 查询外部知识库。以“工具调用”为视角,更能体现智能体作为数字资源和其他智能实体编排者的潜力。
fromgoogle.adk.agentsimportAgentfromgoogle.adk.runnersimportRunnerfromgoogle.adk.sessionsimportInMemorySessionServicefromgoogle.adk.toolsimportgoogle_searchfromgoogle.genaiimporttypesimportnest_asyncioimportasyncioAPP_NAME="Google Search_agent"USER_ID="user1234"SESSION_ID="1234"root_agent=ADKAgent(name="basic_search_agent",model="gemini-2.0-flash-exp",description="通过 Google 搜索回答问题的 Agent。",instruction="我可以通过搜索互联网回答你的问题,尽管问我任何事!",tools=[google_search])asyncdefcall_agent(query):"""调用 Agent 并输出回复。"""session_service=InMemorySessionService()session=awaitsession_service.create_session(app_name=APP_NAME,user_id=USER_ID,session_id=SESSION_ID)runner=Runner(agent=root_agent,app_name=APP_NAME,session_service=session_service)content=types.Content(role='user',parts=[types.Part(text=query)])events=runner.run(user_id=USER_ID,session_id=SESSION_ID,new_message=content)foreventinevents:ifevent.is_final_response():final_response=event.content.parts[0].textprint("Agent 回复:",final_response)nest_asyncio.apply()asyncio.run(call_agent("最新的 AI 新闻有哪些?"))
该代码演示了如何用 Google ADK 创建一个能用 Google 搜索工具回答问题的智能体。定义了智能体、会话服务和 Runner,通过 call_agent 函数发送查询并输出最终回复。
importasynciofromgoogle.genaiimporttypesfromgoogle.adkimportagentsfromgoogle.adk.runnersimportRunnerfromgoogle.adk.sessionsimportInMemorySessionServiceimportosDATASTORE_ID=os.environ.get("DATASTORE_ID")APP_NAME="vsearch_app"USER_ID="user_123"SESSION_ID="session_456"vsearch_agent=agents.VSearchAgent(name="q2_strategy_vsearch_agent",description="用 Vertex AI Search 回答 Q2 战略文档相关问题。",model="gemini-2.0-flash-exp",datastore_id=DATASTORE_ID,model_parameters={"temperature":0.0})runner=Runner(agent=vsearch_agent,app_name=APP_NAME,session_service=InMemorySessionService(),)asyncdefcall_vsearch_agent_async(query:str):print(f"用户:{query}")print("Agent:",end="",flush=True)try:content=types.Content(role='user',parts=[types.Part(text=query)])asyncforeventinrunner.run_async(user_id=USER_ID,session_id=SESSION_ID,new_message=content):ifhasattr(event,'content_part_delta')andevent.content_part_delta:print(event.content_part_delta.text,end="",flush=True)ifevent.is_final_response():print()ifevent.grounding_metadata:print(f" (来源归因:{len(event.grounding_metadata.grounding_attributions)} 个来源)")else:print(" (未找到来源元数据)")print("-"*30)exceptExceptionase:print(f"\n出错:{e}")print("请检查 datastore ID 是否正确及服务账号权限。")print("-"*30)asyncdefrun_vsearch_example():awaitcall_vsearch_agent_async("总结 Q2 战略文档的要点。")awaitcall_vsearch_agent_async("实验室 X 的安全流程有哪些?")if__name__=="__main__":ifnotDATASTORE_ID:print("错误:未设置 DATASTORE_ID 环境变量。")else:try:asyncio.run(run_vsearch_example())exceptRuntimeErrorase:if"cannot be called from a running event loop"instr(e):print("事件循环环境下跳过执行,请直接运行脚本。")else:raisee
该代码为构建基于 Vertex AI Search 的对话式 AI 应用提供了基础框架,支持定义智能体、Runner、异步交互和流式输出。
Vertex 扩展:Vertex AI 扩展是一种结构化 API 封装,使模型能连接外部 API 实现实时数据处理和动作执行。扩展具备企业级安全、数据隐私和性能保障,可用于代码生成与运行、网站查询、私有数据分析等。Google 提供了常用扩展(如代码解释器、Vertex AI Search),也支持自定义。扩展的主要优势是自动执行和企业集成,而函数调用则需用户或客户端手动执行。
Google ADK 内置了如 Google 搜索、代码执行、Vertex AI Search 等实用工具。
总结
工具使用模式是扩展大语言模型功能边界的关键架构原则。通过让模型能与外部软件和数据源接口,智能体可执行动作、计算和信息检索。该过程包括模型在判断需要时生成结构化请求调用外部工具。LangChain、Google ADK、Crew AI 等框架提供了工具集成的结构化抽象和组件,简化了工具规范暴露和调用请求解析,助力开发能与外部数字环境交互的智能体系统。