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"}))
相关推荐
工藤学编程17 小时前
零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
人工智能·langchain·交互
lihuayong19 小时前
从“链”到“图”:LangGraph如何终结LangChain的线性智能体
人工智能·langchain·langgraph
大模型铲屎官21 小时前
【LangChain 核心组件指南 | Agent篇】从零到精通:深度解析 create_agent 与 ReAct 智能体构建
人工智能·python·深度学习·langchain·大模型·agent·react智能体
玲小珑1 天前
LangChain.js 完全开发手册(十二)高性能 AI 应用优化技术
前端·langchain·ai编程
ObjectX前端实验室2 天前
LLM的生态与能力边界&一个基本对话的实现
前端·langchain·llm
这是谁的博客?2 天前
LangChain第三页【操作指南】_【如何缓存对话模型响应】翻译完成
缓存·langchain
kyle-fang2 天前
langchain-基于agent架构的开发
langchain
大模型教程3 天前
LangGraph实战教程(1)- 从零开始认识LangGraph
langchain·llm·agent
kyle-fang3 天前
langchain概述
langchain
xixixi777773 天前
LangChain(一个用于构建大语言模型(LLM)应用程序的开源框架)
人工智能·深度学习·机器学习·langchain·大模型·大模型框架