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直接调用

from langchain_openai import ChatOpenAIclient = ChatOpenAI(model="deepseek-r1", api_key=API_KEY, #申请的百度API KEYbase_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, #替换为对应大模型的KEYapi_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"}))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念

[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念 1.1 网格世界的例子1.2 状态和动作1.3 状态转移1.4 策略1.5 奖励1.6 轨迹、回报、回合1.6.1 轨迹和回报1.6.2 回合 1.7 马尔可夫决策过程 本人为强化学习小白,为了在后续科研的过程中能够较好的结合强化学习来…

Java开发经验——阿里巴巴编码规范经验总结2

摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制,因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…

Java大师成长计划之第18天:Java Memory Model与Volatile关键字

📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在Java多线程编程中,线程…

js前端分片传输大文件+mongoose后端解析

最近一直在完善mongoose做webserver的项目,其中程序升级要通过前端传输升级包到服务器。 因为第一次写前端代码,分片传输的逻辑,网上一堆,大同小异,而且版本啊,API不一致的问题,导致头疼的很。后…

MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构

大家好,我是此林。 目录 1. 前言 2. minimind模型源码解读 1. MiniMind Config部分 1.1. 基础参数 1.2. MOE配置 2. MiniMind Model 部分 2.1. MiniMindForCausalLM: 用于语言建模任务 2.2. 主干模型 MiniMindModel 2.3. MiniMindBlock: 模型的基本构建块…

引言:Client Hello 为何是 HTTPS 安全的核心?

当用户在浏览器中输入 https:// 时,看似简单的操作背后,隐藏着一场加密通信的“暗战”。Client Hello 作为 TLS 握手的首个消息,不仅决定了后续通信的加密强度,还可能成为攻击者的突破口。据统计,超过 35% 的网站因 TL…

Dockerfile 完全指南:从入门到最佳实践

Dockerfile 完全指南:从入门到最佳实践 1. Dockerfile 简介与作用 Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。它允许开发者通过简单的指令定义镜像的构建过程,实现自动化、可重复的镜像构建。 主要作用&#xf…

Python httpx库终极指南

一、发展历程与技术定位 1.1 历史演进 起源:httpx 由 Encode 团队开发,于 2019 年首次发布,目标是提供一个现代化的 HTTP 客户端,支持同步和异步操作,并兼容 HTTP/1.1 和 HTTP/2。背景: requests 库虽然功…

app加固

1、什么是加固? 我们之前讲的逆向,大多数都是用加密算法去加密一些明文字符串,然后把得到的结果用 Base64、Hex等进行编码后提交。加固其实也一样,只不过他通常加密的是 dex文件而已。但是 dex 文件加密以后,安卓系统是没法直接运行的。所以加固的核心&…

Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题

各位办公小能手们!今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换,能把Excel(.xls/.xlsx)和Word(.doc/.docx)文档唰唰地变成PDF格式。 先说说它的核心功…

springCloud/Alibaba常用中间件之Nacos服务注册与发现

文章目录 SpringCloud Alibaba:依赖版本补充六、Nacos:服务注册与发现1、下载安装Nacos2、服务注册1. 导入依赖(这里以服务提供者为例)2. 修改配置文件和主启动类3. 创建业务类4. 测试 3.服务映射1. 导入依赖2. 修改配置文件和主启动类3. 创建业务类和RestTemplate配置类用来提…

uniapp中score-view中的文字无法换行问题。

项目场景: 今天遇到一个很恶心的问题,uniapp中的文字突然无法换行了。得..就介样 原因分析: 提示:经过一fan研究后发现 scroll-view为了能够横向滚动设置了white-space: nowrap; 强制不换行 解决起来最先想到的是,父…

【STM32 学习笔记】I2C通信协议

注:通信协议的设计背景 3:00~10:13 I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强, 不需要USART、CAN等通讯协议的外部收发设备,现在被广…

【网络原理】数据链路层

目录 一. 以太网 二. 以太网数据帧 三. MAC地址 四. MTU 五. ARP协议 六. DNS 一. 以太网 以太网是一种基于有线或无线介质的计算机网络技术,定义了物理层和数据链路层的协议,用于在局域网中传输数据帧。 二. 以太网数据帧 1)目标地址 …

控制台打印带格式内容

1. 场景 很多软件会在控制台打印带颜色和格式的文字,需要使用转义符实现这个功能。 2. 详细说明 2.1.转义符说明 样式开始:\033[参数1;参数2;参数3m 可以多个参数叠加,若同一类型的参数(如字体颜色)设置了多个&…

[6-2] 定时器定时中断定时器外部时钟 江协科技学习笔记(41个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 V 30 31 32 33 34 35 36 37 38 39 40 41

数据库的脱敏策略

数据库的脱敏策略:就是屏蔽敏感的数据 脱敏策略三要求: (1)表对象 (2)生效条件(脱敏列、脱敏函数) (3)二元组 常见的脱敏策略规则: 替换、重排、…

Python序列化的学习笔记

1. Npy&Numpy O4-mini-Cursor:如果.npy文件里包含了「Python对象」而非纯数值数组时,就必须在加载时加上allow_pickleTrue。

[思维模式-27]:《本质思考力》-7- 逆向思考的原理与应用

目录 一、什么是逆向思考 1.1、逆向思考的六大核心思维模式 1.2、逆向思考的四大实践方法 1. 假设倒置法 2. 缺陷重构法 3. 用户反推法 4. 规则解构法 1.3、逆向思考的经典案例库 1. 商业创新:从“卖产品”到“卖服务” 2. 用户体验:从“功能满…

在python中,为什么要引入事件循环这个概念?

在Python中,事件循环(Event Loop)是异步编程的核心机制,它的引入解决了传统同步编程模型在高并发场景下的效率瓶颈问题。以下从技术演进、性能优化和编程范式三个角度,探讨这一概念的必要性及其价值。 一、同步模型的局…