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"}))
相关推荐
大模型教程几秒前
AI基础入门(应用开发篇)——LangChain:核心抽象
langchain·llm·agent
大模型教程7 分钟前
LangChain 入门①:什么是 LangChain?LLM 应用开发的 “好帮手”
langchain·llm·agent
AI大模型22 分钟前
被 LangChain 全家桶搞晕了?LangGraph、LangSmith、LangFlow 一文读懂
langchain·llm·agent
雨中飘荡的记忆7 小时前
LangChain4j 实战指南
java·langchain
AI-智能1 天前
RAG 系统架构设计模式介绍
人工智能·langchain·llm·agent·知识库·rag·大模型应用
大模型教程1 天前
LangChain 核心原理-核心组件&应用开发类型 01
langchain·llm·agent
thginWalker1 天前
《LangChain 实战课》学习笔记
langchain
三点水7691 天前
Langchain提示词模版
langchain
三点水7691 天前
创建自己的第一个LangChainAI
langchain
沛沛老爹2 天前
AI应用入门之LangChain中SerpAPI、LLM-Math等Tools的集成方法实践
人工智能·langchain·llm·ai入门·serpapi