langchain 接入国内搜索api——百度AI搜索

为什么使用百度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直接调用

python 复制代码
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工具

python 复制代码
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"}))
相关推荐
大志说编程6 小时前
LangChain框架入门17: 手把手教你创建LLM工具
python·langchain·ai编程
王国强20098 小时前
LangChain 设计原理分析¹⁵ | AI 编排平台的演化方向
langchain
掘我的金1 天前
20_LangChain多数据源生成
langchain
掘我的金1 天前
19_LangChain结合SQL实现数据分析问答
langchain
王国强20091 天前
LangChain 设计原理分析¹⁴ | 模拟实现一个精简版 LangChain
langchain
王国强20091 天前
LangChain 设计原理分析¹³ | LangChain Serve 快速部署
langchain
前端双越老师1 天前
【干货】使用 langChian.js 实现掘金“智能总结” 考虑大文档和 token 限制
人工智能·langchain·node.js
Dajiaonew1 天前
Spring AI RAG 检索增强 应用
java·人工智能·spring·ai·langchain
xuanwuziyou2 天前
LangChain 多任务应用开发
人工智能·langchain
大志说编程2 天前
LangChain框架入门16:智能客服系统RAG应用实战
后端·langchain·aigc