基于 LangChain 实现通义千问 + Tavily 搜索 Agent 的简单实践

备忘: 使用langchain结合千问大模型,用本地知识库辅助AI生成代码 本文主要是寻求应用langchain建设本地知识库,并通过知识库预先给定的代码逻辑辅助AI生成代码 阅读详情

大语言模型(LLM)虽然拥有强大的语言理解和生成能力,但其自身知识具有时间滞后性,无法直接访问实时数据。这就催生了 Agent广泛应用。

本文将围绕 LangChain 框架,结合通义千问(Tongyi Qianwen)大模型与 Tavily 实时搜索引擎,构建一个具备 Agent 推理能力的实践案例。系统能够根据问题内容,自动判断是否需要使用工具(如 Tavily 进行实时搜索),实现更真实、更准确的答案生成。

一、相关背景

1.1 LangChain 简介

LangChain 是一个用于构建语言模型应用的开源框架,主要提供对大模型、多工具、多模态、链式推理等功能的统一封装,支持通过 Chains、Agents、Tools 等模块灵活组合。

1.2 通义千问(Tongyi Qianwen)

通义千问是阿里云推出的大语言模型,具备优秀的中文理解与生成能力,尤其在中文问答、摘要、对话等任务中表现突出。通过 DashScope API 提供在线推理接口。

1.3 Tavily 实时搜索引擎

Tavily 是一个支持自然语言查询的网页摘要搜索引擎,能够根据用户的问题返回结构化网页摘要结果,适合用于外部知识增强场景。

1.4 架构总览

我们本次系统的架构如下:

用户问题 --> Agent 判断 -->
    |- 无需搜索 --> 通义千问直接生成答案
    |- 需要搜索 --> 使用 Tavily 搜索结果作为上下文 --> 生成答案

系统整体基于 LangChain 的 Agent 模式构建,利用 ZeroShotAgent 自动推理是否使用工具。

二、环境配置

pip install langchain langchain-community dashscope tavily-python

设置 API 密钥

export DASHSCOPE_API_KEY=your_dashscope_api_key
export TAVILY_API_KEY=your_tavily_api_key

三、 Tavily 搜索

我们首先展示一个基于 Tavily 搜索 的普通示例,演示 Tavily 的搜索结果如何作为上下文传给大模型。

from langchain_community.llms import Tongyi
from langchain_community.tools import TavilySearchResults
from langchain_core.prompts import PromptTemplate
import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableLambda

os.environ["OPENAI_API_KEY"] = "sk-"
os.environ["TAVILY_API_KEY"] = "tvly-"

# 初始化 Tavily(旧版 API)
search = TavilySearchResults(k=3)

# 增加 Tavily 搜索结果打印
def run_and_print_search(x):
    query = x["question"]
    results = search.run(query)
    print("\n🔍 Tavily 搜索结果:")
    for idx, item in enumerate(results):
        print(f"[{idx + 1}] {item['title']}")
        print(item['content'][:300])  # 打印前300字
        print(f"URL: {item['url']}")
        print("-" * 60)
    return results

search_tool = RunnableLambda(run_and_print_search)

# 初始化通义千问
llm = Tongyi(model_name="qwen-turbo")

# 提示模板
prompt = PromptTemplate.from_template("""
你是一个中文智能助手,请根据以下网页搜索内容回答用户的问题。
问题:{question}
搜索内容:{context}
请使用简体中文准确、简洁地作答:
""")

# 构建 RAG Chain
rag_chain = (
        {"context": search_tool, "question": lambda x: x["question"]}
        | prompt
        | llm
        | StrOutputParser()
)

# 执行
response = rag_chain.invoke({"question": "今天安徽合肥天气如何"})
print("\n通义千问回答:")
print(response)

在这里插入图片描述

四、智能 Agent 示例:自动判断是否调用 Tavily

在更高级的场景中,我们希望让模型“自己决定”是否使用工具进行搜索。这就需要借助 LangChain 的 Agent 模块。

4.1 初始化 Agent

from langchain.agents import initialize_agent, Tool
from langchain.agents.agent_types import AgentType

# 通义模型
llm = Tongyi(model_name="qwen-turbo")

# 工具定义
search_tool = TavilySearchResults(k=3)
tools = [
    Tool(
        name="tavily_search",
        func=search_tool.run,
        description="适用于需要通过网页获取实时信息的问题,例如新闻、事件时间、最新数据等"
    )
]

agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

4.2 提问两个问题:一个需要搜索,一个不需要

import os

from langchain.agents import initialize_agent, Tool
from langchain.agents.agent_types import AgentType
from langchain_community.llms import Tongyi
from langchain_community.tools.tavily_search import TavilySearchResults

os.environ["OPENAI_API_KEY"] = "sk-"
os.environ["TAVILY_API_KEY"] = "tvly-"

# 初始化通义模型
llm = Tongyi(model_name="qwen-turbo")

# 初始化 Tavily 工具
search_tool = TavilySearchResults(k=3)
tools = [
    Tool(
        name="tavily_search",
        func=search_tool.run,
        description="适用于需要通过网页获取实时信息的问题,例如新闻、事件时间、最新数据等"
    )
]

# 初始化 Agent
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,  # 基于描述自己选择用哪个工具
    verbose=True
)

# 问题1:无需搜索,模型自己可答
question1 = "中国的首都是哪里?"

# 问题2:需要搜索的实时问题
question2 = "今天的天气如何?"

# 执行
print("\n问题1:无需调用 Tool")
response1 = agent.run(question1)
print("答案1:", response1)

print("\n问题2:需要调用 Tavily")
response2 = agent.run(question2)
print("答案2:", response2)

4.3 Agent 自动推理过程

运行过程中,LangChain Agent 会自动识别问题的复杂度:

  • 若模型自身具备能力,则直接生成答案
  • 若识别到需要外部知识,会调用工具(Tavily)并使用其结果
    在这里插入图片描述
通义千问-langchain使用构建(一) 主要的好处,就是定制化,比如说搞好了一个特定的翻译应用,或者说园林行业的专家模型,原本用的openai,然后用着用着,太贵了,替换成通义千问,这时候,就不用局限于openai的开发框架,少量迁移工作就可以换成其他厂商的。模型一多,自然有大模型开发应用框架的出现。每个厂商自身也会推出应用框架,但是有第三方整合使用,一个接口,总比好多个不同接口来的好。所以,这个文章,用一下通义千问应用框架,基于通义千问接口构建一个langchain试用下。一个大模型开发框架,github星多,用的人多,25年尚且流行。 阅读详情

相关推荐

LangChain核心模块——Agents

Agents的核心思想是使用语言模型来选择要采取的一系列操作。在Chains中,一系列操作被硬编码(在代码中)。在Agents中,语言模型被用作推理引擎来确定要采取哪些操作以及按什么顺序。

weixin_43787408的博客 2985

LangChain结合通义千问的自建知识库

在使用了通义千问API了之后,下一步就是构建知识库文档,使用了比较有名的LangChian,最后成果将自己的txt生成了知识向量库,最后我还把自己的论文生成了一个知识向量库,然后问他我的创新点是啥,实话实说比我总结的好,我想这下回老师要是看不懂我论文的时候能不能直接,嗯,对吧,反正也是工作中用到还挺有意思的,能分享的部分我都分享出来了,然后这个是接着通专栏的第一篇的延申文档。

一个学长的博客 1万+

Tavily Search Skill集成指南:构建可靠AI Agent网络搜索能力

Tavily Search是一种面向大模型Agent的‘答案优先’网络搜索API,其核心原理是通过检索-摘要-聚合三阶段处理,直接返回结构化、可解析的JSON结果,显著降低LLM解析噪声。该技术价值在于提升Agent对外部实时信息的获取准确率与鲁棒性,广泛应用于金融问答、技术文档更新、新闻摘要等强时效性场景。本文聚焦Tavily Search Skill的设计与集成,详解如何将其封装为LangChain标准Tool,并实现安全认证、错误降级、结果格式化与LLM可理解的自然语言反馈,解决真实工程中API调用失

weixin_30824479的博客 400

langchain入门篇:利用Python + LangChain + 通义千问,轻松打造你的专属聊天机器人

是一个用于开发由语言模型驱动的应用程序的框架,致力于简化AI模型应用的开发.简单来说,langchain就是一个帮助开发者轻松完成AI模型应用开发的框架,现在支持python和js两个版本,它集成多种大语言模型及第三方api.

m0_63171455的博客 3221

探索OpenAI Functions Agent:集成Tavily搜索引擎的智能代理

OpenAI Functions Agent结合了强大的功能调用和Tavily搜索引擎的互联网信息查找能力,适用于多种应用场景。OpenAI API 文档Tavily API 文档LangChain 指南。

aehrutktrjk的博客 902

LangChain实战——Tavily搜索引擎的高级应用与优化技巧

本文深入探讨了在LangChain框架中如何高效利用Tavily搜索引擎。通过解析核心参数如搜索深度与主题,并结合缓存、分层搜索等优化策略,显著提升信息获取的精准度与成本效益。文章还展示了如何将Tavily与LangChain智能体、知识库系统深度融合,构建能够自主调研和实时更新的AI应用,为开发者提供了一套完整的高级应用与优化方案。

weixin_29039773的博客 436

用 LangChain + 通义千问,打造一个能查天气、能搜新闻的多任务问答助手

这个项目麻雀虽小,五脏俱全——配置校验、结构化日志、工具封装、Function Calling、国产模型迁移,一个 Agent 应用该有的要素都有了。如果你正在入门 LangChain,非常推荐照着这个结构搭一个自己的助手。🔧 把 if/elif 分发改成工具映射表,支持热插拔新工具🧠 把对话历史真正注入 LLM,实现多轮记忆🌐 加一个FastAPI 接口层,从 CLI 变成 Web 服务📄 把知识库接进来(LlamaIndex + 切片 + RAG),升级成企业问答机器人。

swpucwf的博客 441

从ORCAP-1589警告看Cadence ORCAD的DRC设置:如何避免‘网络别名’引发的潜在短路风险

本文深入解析Cadence ORCAD中ORCAP-1589警告的深层含义,探讨网络别名可能引发的短路风险及DRC设置优化方案。通过分析网络别名的设计意图、DRC规则配置及最佳实践,帮助工程师有效规避设计风险,提升电路设计的可靠性和规范性。

weixin_34194829的博客 293

SpringBoot 整合LangChain4j 集成 Tavily 实现联网搜索,如何获取Tavily API_KEY(一篇文章解决AI联网搜索全部问题)

本文介绍了如何通过LangChain4j集成Tavily API实现联网搜索功能。主要内容包括:1)获取Tavily API密钥的步骤;2)项目配置方法,通过YAML文件设置API参数和搜索结果数量限制;3)创建WebSearchConfig类管理搜索配置;4)实现ContentRetriever接口进行内容检索;5)构建WebSearchAgent代理服务,结合@AiService注解完成联网搜索功能。文章提供了完整的代码示例和配置说明,帮助开发者快速集成网络搜索能力到LangChain4j项目中。

2301_80100192的博客 3036

LVGL多线程编程避坑指南:从音乐播放器项目看UI与后台任务如何安全协作

本文深入探讨LVGL在多线程环境下的安全协作问题,以音乐播放器项目为例,解析UI与后台任务(如mplayer音频播放器)的典型冲突场景。提供全局互斥锁规范、任务队列异步处理等核心策略,并分享mplayer进程集成方案与进度条优化技巧,帮助开发者规避界面卡顿、内存损坏等常见问题。

weixin_42531494的博客 130

CRMEB商城系统任意文件下载漏洞(CVE-2024-52726)分析与修复

在Web应用安全领域,API接口安全是保障系统边界安全的核心环节。其原理在于通过签名验证、参数校验等机制,确保请求的合法性与完整性。这项技术的价值在于为系统间数据交互提供安全通道,防止未授权访问和数据泄露。典型的应用场景包括电商系统的对外数据接口、第三方服务集成等。然而,当签名验证逻辑存在缺陷或文件路径处理不当,便会引发严重的安全风险。本文以CRMEB开源商城系统为例,深入剖析其对外API模块中因签名验证绕过和路径遍历导致的任意文件下载漏洞。该漏洞允许攻击者下载服务器敏感文件,如数据库配置文件、日志和源码,

weixin_27722377的博客 365

一文学会LangChain搭建Agent工具

同时课程详细介绍了。

2401_85116933的博客 679

FreeSWITCH安装指南:三种部署方式解析与实践对比

Freeswitch部署方案比较:Yum安装简单快捷但灵活性差;源码安装可定制性强,适合深度开发和性能优化;Docker部署环境一致性好但网络配置复杂。生产环境推荐源码安装以获得最佳性能和定制能力,而Docker适合快速部署和扩展。不同方案各有利弊,需根据具体需求选择。

c_zyer的博客 2130

基于LangChain构建一个简单的Agent代理

本文说明如何基于LangChain构建一个简单的Agent代理;使用OpenAi模型和TAVILY搜索。 该Agent代理具备读取历史信息的能力。

java_lover222的博客 1152

机器学习算法 —— LightGBM

本次我们选择英雄联盟数据集进行LightGBM的场景体验。英雄联盟是2009年美国拳头游戏开发的MOBA竞技网游,在每局比赛中蓝队与红队在同一个地图进行作战,游戏的目标是破坏敌方队伍的防御塔,进而摧毁敌方的水晶枢纽,拿下比赛的胜利。现在共有9881场英雄联盟韩服钻石段位以上的排位比赛数据,数据提供了在十分钟时的游戏状态,包括击杀数、死亡数、金币数量、经验值、等级……参考项目:机器学习系列入门系列[七]:基于英雄联盟数据集的LightGBM的分类预测。

ZShiJ的博客 706

车牌识别系统

随这图形图像技术的发展,现在的车牌识别技术准确率越来越高,识别速度越来越快。无论何种形式的车牌识别系统,它们都是由触发、图像采集、图像识别模块、辅助光源和通信模块组成的。车牌识别系统涉及光学、电器、电子控制、数字图像处理、计算视觉、人工智能等多项技术。触发模块负责在车辆到达合适位置时,给出触发信号,控制抓拍。辅助光源提供辅助照明,保证系统在不同的光照条件下都能拍摄到高质量的图像。图像预处理程序对抓拍的图像进行处理,去除噪声,并进行参数调整。然后通过车牌定位、字符识别,最后将识别结果输出。 牌照自动识别是一

FPGA/MATLAB学习教程/源码/项目合作开发 2万+

从零构建AI研究助手:基于LangChain与通义千问的Mini DeepResearch实践

大语言模型(LLM)作为当前人工智能的核心技术,通过模拟人类语言理解和生成能力,为自动化任务处理提供了新的可能。其核心原理是基于海量数据训练的Transformer架构,能够根据上下文生成连贯文本。在工程实践中,LLM的价值在于能够作为智能中枢,与外部工具和环境交互,完成复杂任务。AI Agent正是这一理念的典型应用,它将LLM的推理能力与搜索引擎、数据库等工具相结合,形成能够自主执行任务的智能体。其中,研究型Agent专注于信息搜集、分析与整合,可自动完成行业调研、技术分析等场景下的资料收集与报告生成。

weixin_30568591的博客 922

蓝牙学习笔记之SMP协议(十四)

目录 写在前面 SM规范简述 安全管理器 加密工具 配对流程 安全属性 IO功能 加密密钥大小 配对算法 低功耗蓝牙安全 密钥和值的定义 分发密钥的生成 密钥分配 安全管理器会话协议 介绍 ​​​​​​​命令格式 写在前面 安全规范协议,主要是描述LE控制器设备配对、认证、加密等过程进行规定,同时也对相关算法进行了说明。 低功耗蓝牙的安全管理经历了几个阶段,L...

在云巅的博客 3658

Langchain相关知识:概念、调用LLM、提示模板、程序部署、Tavily搜索工具、代理Agent

Langchain

weixin_65973062的博客 1170

C# 上位机内存泄漏排查指南:3 个工具 + 4 个技巧,从 GC 频繁到稳定运行 720 小时

C# 上位机内存泄漏排查的核心是「先定位泄漏存在,再追溯引用根源,最后修复验证通过「Visual Studio 诊断工具(快速定位)+ dotMemory(深度分析)+ PerfView(生产监控)」三个工具的配合,结合「复现场景、排查静态成员+事件、检查非托管资源、GC 日志验证」四个技巧,可高效解决绝大多数泄漏问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 732

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大模型开发 - 手写Manus之Tavily搜索工具:04 让AI Agent接入互联网

本文介绍了如何为Java实现的AI Agent集成Tavily搜索引擎,使其具备互联网实时信息检索能力。通过langchain4j的Tavily封装,开发者只需添加依赖并实现搜索工具类,即可为Agent添加网页搜索功能。文章详细展示了TavilySearchTool的实现过程,包括参数定义、搜索执行和结果格式化,并演示了从搜索到信息提取再到文件存储的完整流程。Tavily相比传统搜索引擎API更适合AI Agent场景,提供结构化数据和高质量摘要。通过环境变量管理API密钥,确保了安全性。这种设计使Agen

小工匠 1874

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LangChain之Agent代理(上)

在LangChain中,Agent代理就是使用语言模型作为推理引擎,让模型自主判断、调用工具和决定下一步行动。

积跬步,至千里。 2211

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

langchain (十):Agent 调用外部工具(Tools)

摘要:LangChain框架中的Tools(工具)让大语言模型能够调用外部函数执行特定任务。本文详细介绍了如何通过Agent机制实现模型自动决策调用工具,以通义千问+Tavily搜索为例,展示了完整实现流程。核心内容包括:工具调用原理、环境配置、代码实现(模型初始化、工具绑定、Agent创建)、以及扩展优化建议。通过自定义@tool装饰器和Pydantic参数控制,开发者可以灵活创建各类工具,使大模型突破知识局限,具备实时信息获取和特定计算能力。

技术博客 1376

【8】补充与拓展:Langchain的联网搜索Agent,使用Tavily工具

在这个架构中,系统会先对用户的问题进行意图分类,然后动态决定是查询本地知识库(向量搜索),还是调用 Tavily 进行实时网络搜索。它能够提供结构化、带溯源的搜索结果,非常适合用来赋予 Agent 实时联网搜索的能力。首先,你需要安装 LangChain 的 Tavily 集成包,并获取 Tavily 的 API Key(可以在 Tavily 官网注册获取)。通过这套架构,你的多智能体系统不仅具备了“记忆”和“多专家协作”的能力,还长出了“感知外部实时世界”的眼睛,真正达到了生产级智能客服的标准!

weixin_45311418的博客 238

LangChain开发Agent联网搜索实现

原型阶段用。

mnhpo_Q的博客 333

Langchain Agent封装的工具

本文档详细介绍了LangChain框架中可用的Agent工具及其使用方法。这些工具可以赋予AI智能体与外部系统和服务交互的能力,从而构建功能更强大的应用程序。

刘培玉-大王 1526
上一篇: LangChain 构建向量数据库和检索器
下一篇: 聪明人是如何思考的?——《你的灯亮着吗》读书笔记(初识)
ZWZhangYu
ZWZhangYu 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 495原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZWZhangYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值