为什么使用百度AI搜索
学习langchain的过程中,遇到使用search api的时候,发现langchain官方文档中支持的搜索工具大多是国外的,例如google search或bing search,收费不说,很多还连接不上(工具 | LangChain中文网)。
经过一番寻找,发现国内也有两家提供search api,一个是博查(博查AI开放平台 | Search API, Reranker API),另一个就是最近刚出的百度AI搜索(百度AI搜索 - 千帆AppBuilder-产品文档)。
博查是收费的,而百度AI搜索每天有100次的免费额度,更加适合个人学习使用。
使用方式
百度AI搜索支持post请求,OpenAI SDK,Cursor MCP组件等多种方式调用,今天主要讲一下在langchain中如何使用。
第一步首先需要申请一个API KEY
通过langchain-openai直接调用
from langchain_openai import ChatOpenAI
client = ChatOpenAI(
model="deepseek-r1",
api_key=API_KEY, #申请的百度API KEY
base_url="https://qianfan.baidubce.com/v2/ai_search"
)
response = client.invoke("今天成都天气怎么样")
print(response)
直接调用有许多参数不支持,如果希望能够自由设置例如最大返回数量,检索条件等参数,可以使用工具,具体参数可以查看百度AI搜索 - 千帆AppBuilder-产品文档
自定义langchain工具
import requests
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_qwq import ChatQwQ
@tool
def baidu_search_tool(query: str) -> str:
"""
使用Baidu Search API进行联网搜索,返回搜索结果的字符串。
参数:
- query: 搜索关键词
返回:
- 搜索结果的字符串形式
"""
url = 'https://qianfan.baidubce.com/v2/ai_search'
headers = {
'Authorization': f'Bearer {API_KEY}', # 请替换为你的API密钥
'Content-Type': 'application/json'
}
messages = [
{
"content": query,
"role": "user"
}
]
data = {
"messages": messages,
"search_source": "baidu_search_v2",
"search_recency_filter":"month" #可以自定义各种检索条件
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
# 返回给大模型的格式化的搜索结果文本
# 可以自己对博查的搜索结果进行自定义处理
return str(response.json())
else:
raise Exception(f"API请求失败,状态码: {response.status_code}, 错误信息: {response.text}")
#打印工具名称,描述,参数等 名称正确、文档正确且类型提示正确的工具更易于模型使用
print(baidu_search_tool.name)
print(baidu_search_tool.description)
print(baidu_search_tool.args)
#直接使用工具
print(baidu_search_tool.invoke("介绍下langchain"))
tools = [baidu_search_tool]
#通义千问大模型,可以替换为任何一个支持工具调用的大模型
tongyi_chat = ChatQwQ(
model="qwen-plus",
api_key=QWEN_KEY, #替换为对应大模型的KEY
api_base="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
#查看我们的输入是否会调用工具,注意,这里并不会真正调用工具
with_tool = tongyi_chat.bind_tools(tools)
result = with_tool.invoke("今天成都天气怎么样")
print(result.content)
print(result.tool_calls)
#创建代理并调用工具
prompt = ChatPromptTemplate.from_template("今天{city}天气怎么样 {agent_scratchpad}")
agent = create_tool_calling_agent(tongyi_chat, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
print(agent_executor.invoke({"city":"成都", "agent_scratchpad":"intermediate_steps"}))