AI Case 8 · 让AI调用搜索引擎
21天AI案例实践 · 第8期 | 关键词:Function Calling · Tool定义 · Agent搜索 · ReAct范式
大模型虽然知识渊博,但它的训练数据有截止时间。碰到"今天发生了什么"、"最新股价多少"这类问题,它只能摊手说"我的知识截止到XXXX年"。
今天我们就来解决这个问题——让AI学会上网搜索。
一、核心思路:把搜索引擎变成AI的"工具"
回想一下你自己遇到不知道的事情:打开搜索引擎 → 输入关键词 → 看结果 → 总结答案。
Function Calling 就是让AI也走这套流程。
技术架构

整个系统分为四层:
| 层级 | 职责 | 核心组件 |
|---|---|---|
| 用户交互层 | 接收自然语言问题 | 命令行 / API / 微信 |
| Agent推理层 | 理解意图、决策、调用工具 | LangChain Agent + LLM |
| 外部服务层 | 执行搜索、获取数据 | Google / DuckDuckGo API |
| 结果输出层 | 整合信息、生成回答 | 自然语言 + 引用来源 |
二、Function Calling 到底是怎么跑的?
这里有一个很多人会搞混的点:不是AI"主动"去调用搜索,而是LLM输出一个特殊的结构化响应(tool_call),由外部的 Agent 框架来执行。

整个流程遵循 ReAct 范式(Reasoning + Acting):
Thought(思考)→ Action(行动)→ Observation(观察)→ 循环
第1步:LLM 分析问题
用户问:"今天有什么AI大新闻?" LLM想:这个问题需要最新信息,我自己的知识不够 → 生成
tool_call: web_search("AI news today")
第2步:Agent 执行工具
Agent框架拿到 tool_call → 调用 Google Search API → 拿到10条搜索结果
第3步:结果返回 LLM
搜索结果作为上下文注入 → LLM基于搜索结果重新思考 → 生成最终回答
关键洞察:如果一次搜索不够,Agent 会自动发起第二轮、第三轮……直到认为信息够了为止。
三、上代码!10分钟跑起来
下面是一个完整可运行的最小示例。只有 65 行代码,但包含了搜索 Agent 的全部核心逻辑。
环境准备
pip install langchain langchain-openai duckduckgo-search
完整代码
"""
AI搜索Agent - 最小可运行示例
使用 DuckDuckGo 搜索(免费,无需API Key)+ LangChain Agent
"""
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.tools import DuckDuckGoSearchRun
# ── 1. 配置LLM ──
llm = ChatOpenAI(
model="gpt-4o-mini", # 性价比之选,也可以用 qwen-plus
temperature=0.3,
api_key="your-api-key", # 替换为你的 OpenAI / 通义千问 API Key
base_url="https://api.openai.com/v1" # 或通义千问: https://dashscope.aliyuncs.com/compatible-mode/v1
)
# ── 2. 定义工具:DuckDuckGo 搜索 ──
search = DuckDuckGoSearchRun(
name="web_search",
description="搜索互联网获取最新信息。输入搜索关键词,返回相关网页摘要。"
)
tools = [search]
# ── 3. 定义 System Prompt ──
prompt = ChatPromptTemplate.from_messages([
("system", """你是一个专业的AI研究助手,具备联网搜索能力。
工作流程:
1. 遇到需要最新信息的问题,先调用 web_search 工具搜索
2. 获取搜索结果后,基于结果进行总结分析
3. 如果一次搜索信息不够,可以发起多次搜索
4. 回答时务必注明信息来源
注意:
- 搜索时使用简洁的关键词,不要输入完整句子
- 中文问题优先搜索中文关键词
- 如果搜索无结果,诚实告知用户"""),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
# ── 4. 构建 Agent ──
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # 打印思考过程,方便调试
max_iterations=5, # 最多搜索5轮
handle_parsing_errors=True
)
# ── 5. 测试 ──
if __name__ == "__main__":
questions = [
"2026年6月AI领域有什么重要新闻?",
"OpenAI最新的GPT模型有什么新功能?",
"中国AI大模型市场的最新格局是怎样的?",
]
for q in questions:
print(f"\n{'='*50}")
print(f"❓ 提问: {q}")
print(f"{'='*50}")
result = executor.invoke({"input": q})
print(f"\n✅ 回答:\n{result['output']}")
运行效果
开启 verbose=True 后,你会看到 Agent 的完整思考过程:
> Entering new AgentExecutor chain...
Invoking: `web_search` with `2026年6月 AI 重要新闻`
[搜索结果] Title: 2026年6月AI行业十大事件 ...
Summary: 6月以来,AI行业发生多起重磅事件:...
基于搜索结果,2026年6月AI领域主要有以下几个重要事件:
1. ...
2. ...
> Finished chain.
四、关键知识点
4.1 Tool 定义规范
LangChain 中定义一个 Tool 有三要素:
@tool
def my_search(query: str) -> str:
"""搜索互联网获取最新信息"""
# 实现搜索逻辑
return results
| 要素 | 说明 | 例子 |
|---|---|---|
| name | 工具名称,LLM用这个来调用 | web_search |
| description | 何时使用这个工具 | "搜索互联网获取最新信息" |
| function | 实际的执行逻辑 | API调用 / 数据库查询 |
描述写得好不好,直接决定 Agent 会不会用这个工具。 如果描述太模糊,LLM 可能完全忽略它。
4.2 ReAct 范式
ReAct = Reasoning + Acting,是当前 Agent 领域最主流的范式:
Question: 今天深圳天气怎么样?
Thought: 我需要查询深圳今天的天气
Action: web_search
Action Input: "深圳 2026年6月10日 天气"
Observation: 深圳今日晴,25-32℃,湿度65%...
Thought: 我已经获得了天气信息,可以给出答案了
Final Answer: 深圳今天天气晴朗,温度25-32℃,适合出行。
4.3 常见搜索引擎方案对比
| 方案 | 费用 | API Key | 特点 |
|---|---|---|---|
| DuckDuckGo | 免费 | 不需要 | 适合开发测试,结果可能有限 |
| Google Custom Search | 100次/天免费 | 需要 | 结果质量高,有配额限制 |
| Bing Search API | $7/1000次 | 需要 | 微软生态,国内可用 |
| SerpAPI | $50/月起 | 需要 | 代理多搜索引擎,省心 |
五、生产环境增强建议
上面的代码可以直接跑通,但要用于生产,建议补充以下几点:
超时控制:搜索API响应可能很慢,加 timeout参数结果缓存:相同搜索词短时间内不重复请求(省配额) 敏感词过滤:用户输入可能包含敏感内容,需要后端过滤 搜索结果清洗:去掉SEO垃圾、广告页面,保留高质量内容 引用溯源:每条回答附上原始URL,让用户可以核实
六、本期小结
| 维度 | 要点 |
|---|---|
| 核心能力 | Function Calling 让 LLM 可以调用外部工具 |
| 关键机制 | ReAct 循环:思考→行动→观察→再思考 |
| 代码复杂度 | 65行核心代码即可运行 |
| 扩展方向 | 不只搜索引擎,任何API都可以包装成Tool |
第8期的核心心法:AI 的能力 = LLM的推理能力 × 可调用的工具数量。工具越多,AI能做的事情就越多。
🚀 下期预告:SQL智能查询助手 — 让AI直接用自然语言查数据库,零SQL基础也能做数据分析。
本文是「21天AI案例实践」系列第8期,每期一个可运行的AI实战项目。关注本号,不错过更新。
夜雨聆风