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"}))
相关推荐
明明跟你说过10 小时前
掌握 LangChain 文档处理核心:Document Loaders 与 Text Splitters 全解析
人工智能·语言模型·自然语言处理·langchain
ZhangJiQun&MXP1 天前
Top-p采样:解锁语言模型的创意之门
人工智能·深度学习·机器学习·语言模型·自然语言处理·langchain·概率论
珊珊而川2 天前
ChatPromptTemplate创建方式比较
服务器·langchain
fengchengwu20124 天前
langchain4j集成QWen、Redis聊天记忆持久化
redis·langchain·qwen·聊天记忆持久化
AI探子4 天前
【LangChain基础系列】深入全面掌握文本加载器
langchain
小饕6 天前
LangChain构建大模型应用之问答系统(五)
人工智能·python·langchain
yibuapi_com6 天前
Embedding 的数学特性与可视化解析
chatgpt·架构·langchain·embedding·claude·向量数据库·中转api
为啥全要学7 天前
vLLM部署Qwen2-7B模型推理
python·langchain·vllm
满怀10157 天前
【LangChain全栈开发指南】从LLM集成到智能体系统构建
人工智能·python·langchain·ai编程·智能体开发