langchai自带的搜索功能国内tool有哪些(langchain+deepseek+百度AI搜索 打造带搜索功能的agent)

LangChain框架本身没有专门针对国内环境"自带"或"预集成"的搜索工具。因此,你通常需要自己接入国内的搜索服务。下表汇总了几个可行的方案:

方案/工具 类型 说明与特点
百度AI搜索 国内搜索API 通过千帆平台提供,有免费额度。需申请API Key,并在LangChain中封装成自定义工具使用。
自建 SearxNG 元搜索引擎 开源、可自部署的隐私友好型搜索引擎。部署后,在LangChain中可通过 SearxNG Search 工具配置使用。
阿里达摩院模型 (如GTE) 语义检索模型 非网络搜索,用于对本地文档进行语义检索 (例如构建知识库)。可通过 HuggingFaceEmbeddings 等接口集成。

🔧 如何接入百度AI搜索

如果你需要直接搜索国内的公开网络信息,百度AI搜索是一个可行的选择。具体接入步骤如下:

  1. 获取API密钥

    • 访问百度智能云"千帆AppBuilder"平台,申请开通"百度AI搜索"服务并获取API Key。
  2. 在LangChain中封装成自定义工具

    • LangChain没有内置此工具,需要你根据其接口自定义一个 Tool。核心是调用百度提供的接口,示例代码如下:
    python 复制代码
    import requests
    from langchain_core.tools import tool
    
    @tool
    def baidu_search_tool(query: str) -> str:
        """使用百度AI搜索进行联网搜索。输入应为搜索关键词。"""
        url = 'https://qianfan.baidubce.com/v2/ai_search'
        headers = {
            'Authorization': f'Bearer {你的API_KEY}',
            'Content-Type': 'application/json'
        }
        data = {
            "messages": [{"content": query, "role": "user"}],
            "search_source": "baidu_search_v2",
            # 可自定义参数,如时效性过滤
            "search_recency_filter": "month"
        }
        response = requests.post(url, headers=headers, json=data)
        if response.status_code == 200:
            # 将API返回的JSON结果处理成字符串返回
            return str(response.json())
        else:
            raise Exception(f"搜索请求失败: {response.status_code}")
  3. 将工具赋予智能体 (Agent) 使用

    • 将上述定义好的 baidu_search_tool 加入工具列表,然后初始化你的智能体即可。
python 复制代码
# 1. 安装必要库 (在终端中运行)
# pip install langchain langchain-openai langchain-community requests





# 1. 安装必要库 (在终端中运行)
# pip install langchain langchain-openai langchain-community requests

# 2. 导入库并设置API密钥
import os
from langchain_openai import ChatOpenAI  # 注意:虽然导入名为ChatOpenAI,但可以兼容DeepSeek
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
import requests
import json

# === 配置你的API密钥 ===
# 注意:这里使用DeepSeek的API密钥,不是OpenAI的
# === 配置你的API密钥 ===
os.environ["BAIDU_API_KEY"] = "你的百度千帆API Key"  # 从百度智能云控制台获取
os.environ["OPENAI_API_KEY"] = "你的DeepSeek API Key"  # 或其他兼容API(如DeepSeek、Ollama本地模型)

# 3. 定义百度AI搜索工具(保持不变)
@tool
def baidu_ai_search(query: str, recency: str = "day") -> str:
    """
    使用百度AI搜索API获取最新的网络信息。当你需要查询实时、准确的事实性信息时使用此工具。
    
    Args:
        query: 搜索查询关键词,应清晰具体。
        recency: 时间过滤,可选:'day'(24小时内)、'week'、'month'、'year'。
    
    Returns:
        整理后的搜索结果字符串。
    """
    try:
        # 百度AI搜索API端点(千帆平台)
        url = "https://qianfan.baidubce.com/v2/ai_search"
        
        headers = {
            "Authorization": f"Bearer {os.getenv('BAIDU_API_KEY')}",
            "Content-Type": "application/json"
        }
        
        # 构建请求体,可根据需要调整参数
        data = {
            "messages": [{"role": "user", "content": query}],
            "search_source": "baidu_search_v2",
            "search_recency_filter": recency,
            "search_domain_filter": "normal"  # 可选:'normal'(通用)、'news'(新闻)、'academic'(学术)
        }
        
        response = requests.post(url, headers=headers, json=data, timeout=10)
        
        if response.status_code == 200:
            result = response.json()
            
            # 解析百度API返回的JSON结构
            if "answer" in result:
                # 提取结构化答案
                answer = result.get("answer", "")
                
                # 提取搜索摘要和参考来源
                references = []
                if "search_results" in result:
                    for item in result["search_results"][:3]:  # 取前3条结果
                        ref = {
                            "title": item.get("title", ""),
                            "url": item.get("url", ""),
                            "snippet": item.get("snippet", "")[:150]  # 截取片段
                        }
                        references.append(ref)
                
                # 格式化输出
                formatted_result = f"【搜索结果】\n{answer}\n\n【参考来源】"
                for i, ref in enumerate(references, 1):
                    formatted_result += f"\n{i}. {ref['title']}\n   摘要:{ref['snippet']}...\n   链接:{ref['url']}"
                
                return formatted_result
            else:
                return f"搜索成功,但返回格式异常:{json.dumps(result, ensure_ascii=False)[:500]}"
        else:
            return f"搜索请求失败,状态码:{response.status_code},错误信息:{response.text}"
    
    except Exception as e:
        return f"搜索过程中发生异常:{str(e)}"

# 4. 创建LangChain智能体(修改LLM配置部分)
def create_search_agent():
    # 初始化LLM - 使用DeepSeek V3模型
    # DeepSeek V3模型名称:deepseek-chat (或 deepseek-reasoner 用于复杂推理)
    # DeepSeek V3 API端点:https://api.deepseek.com/v1
    llm = ChatOpenAI(
        model="deepseek-chat",  # 使用DeepSeek V3聊天模型
        temperature=0.1,  # 较低的温度使回答更确定
        api_key=os.getenv("DEEPSEEK_API_KEY"),  # DeepSeek API密钥
        base_url="https://api.deepseek.com",  # DeepSeek API端点
        max_tokens=4096,  # DeepSeek支持长上下文
    )
    
    # 工具列表(可扩展添加其他工具)
    tools = [baidu_ai_search]
    
    # 智能体提示词模板
    prompt = ChatPromptTemplate.from_messages([
        ("system", """你是一个专业的AI助手,可以访问百度搜索工具来获取最新信息。
        如果用户的问题涉及实时信息、不确定的事实或需要最新数据,请使用搜索工具。
        回答时应基于搜索到的信息,并注明来源。
        注意:你使用的是DeepSeek模型,请充分发挥你的能力。"""),
        MessagesPlaceholder(variable_name="chat_history"),
        ("human", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ])
    
    # 创建智能体
    agent = create_tool_calling_agent(
        llm=llm,
        tools=tools,
        prompt=prompt
    )
    
    # 创建执行器
    agent_executor = AgentExecutor(
        agent=agent,
        tools=tools,
        verbose=True,  # 设置为True可查看详细思考过程
        handle_parsing_errors=True,  # 处理解析错误
        max_iterations=3,  # 限制最大迭代次数,防止无限循环
    )
    
    return agent_executor

# 5. 添加健康检查函数(可选但推荐)
def check_api_health():
    """检查API连接是否正常"""
    print("正在检查API连接状态...")
    
    # 检查DeepSeek API
    try:
        from langchain_openai import ChatOpenAI
        test_llm = ChatOpenAI(
            model="deepseek-chat",
            api_key=os.getenv("DEEPSEEK_API_KEY"),
            base_url="https://api.deepseek.com/v1",
            max_tokens=50
        )
        test_response = test_llm.invoke("简单回复'连接正常'即可")
        print(f"✓ DeepSeek API连接正常: {test_response.content}")
    except Exception as e:
        print(f"✗ DeepSeek API连接失败: {str(e)}")
    
    # 检查百度API
    try:
        test_search = baidu_ai_search.invoke("测试连接")
        print(f"✓ 百度API连接正常")
    except Exception as e:
        print(f"✗ 百度API连接失败: {str(e)}")
    
    print("-" * 50)

# 6. 主程序:使用智能体
def main():
    print("=== LangChain + DeepSeek V3 + 百度AI搜索智能体 ===")
    print("初始化智能体...")
    
    # 先进行健康检查
    check_api_health()
    
    # 创建智能体
    agent = create_search_agent()
    
    # 示例查询(可替换为你的问题)
    test_queries = [
        "今天中国航天有什么最新发射消息?",
        "2024年新能源汽车销量排名前五的品牌是哪些?",
        "解释一下什么是Sora视频生成模型",
    ]
    
    for query in test_queries:
        print(f"\n{'='*50}")
        print(f"用户提问: {query}")
        print(f"{'='*50}")
        
        try:
            # 执行查询
            response = agent.invoke({"input": query, "chat_history": []})
            print(f"\n助手回答:\n{response['output']}")
            
        except Exception as e:
            print(f"执行出错: {str(e)}")

# 7. 交互式模式
def interactive_mode():
    """交互式对话模式"""
    print("=== 交互模式 (DeepSeek V3) ===")
    print("输入 '退出' 或 'quit' 结束对话")
    
    # 先检查API
    check_api_health()
    
    agent = create_search_agent()
    chat_history = []
    
    while True:
        user_input = input("\n你: ").strip()
        
        if user_input.lower() in ["退出", "quit", "exit", "q"]:
            print("再见!")
            break
            
        if not user_input:
            continue
        
        try:
            result = agent.invoke({
                "input": user_input,
                "chat_history": chat_history
            })
            
            print(f"\n助手: {result['output']}")
            chat_history.append(("human", user_input))
            chat_history.append(("ai", result['output']))
            
        except Exception as e:
            print(f"出错: {str(e)}")

if __name__ == "__main__":
    # 运行示例测试
    # main()
    
    # 或运行交互模式
    interactive_mode()
相关推荐
玄同76519 小时前
Llama.cpp 全实战指南:跨平台部署本地大模型的零门槛方案
人工智能·语言模型·自然语言处理·langchain·交互·llama·ollama
玄同76519 小时前
LangChain v1.0+ Prompt 模板完全指南:构建精准可控的大模型交互
人工智能·语言模型·自然语言处理·langchain·nlp·交互·知识图谱
一只理智恩20 小时前
筹备计划·江湖邀请令!!!
python·langchain
华大哥20 小时前
AI大模型基于LangChain 进行RAG与Agent智能体开发
人工智能·langchain
玄同76521 小时前
LangChain v1.0+ Retrieval模块完全指南:从文档加载到RAG实战
人工智能·langchain·知识图谱·embedding·知识库·向量数据库·rag
Bruk.Liu1 天前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain
疯狂踩坑人2 天前
【Python版 2026 从零学Langchain 1.x】(二)结构化输出和工具调用
后端·python·langchain
冀博2 天前
从零到一:我如何用 LangChain + 智谱 AI 搭建具备“记忆与手脚”的智能体
人工智能·langchain
qq_455760852 天前
langchain(二)
langchain