06-LangChain Tool 加载与使用指南:预制工具、SerpAPI、edge-tts、GraphQL

0 如何加载使用tool?

LangChain 预制工具示例
工具来源
Agent
工具
工具集
LangChain

预制工具 50+
用户自定义
Alpha Vantage
ArXiv
Bing Search
DALL-E Image Generator
GraphQL
IFTTT
...
工具1
工具2
工具N

加载预制tool的方法

langchain预制了大量的tools,基本这些工具能满足大部分需求,github

python 复制代码
# 添加预制工具的方法很简单
from langchain_community.agent_toolkits.load_tools import load_tools
tool_names = [...]
tools = load_tools(tool_names) #使用load方法
# 有些tool需要单独设置llm
from langchain_community.agent_toolkits.load_tools import load_tools
tool_names = [...]
llm = ...
tools = load_tools(tool_names, llm=llm) # 在load的时候指定llm

1 SerpAPI

最常见的聚合搜索引擎 https://serper.dev/dashboard

python 复制代码
search = SerpAPIWrapper()
search.run("Obama's first name?")

'Barack Hussein Obama II'

相当于自动帮我们调用了搜索引擎获得结果。

支持自定义参数,比如将引擎切换到bing,设置搜索语言等

python 复制代码
params = {
    "engine": "baidu",
    "gl": "cn",
    "hl": "zh",
}
search = SerpAPIWrapper(params=params)
search.run("Obama's first name?")

结果就不太一样了对吧:

java 复制代码
'[\'http://nourl.ubs.baidu.com/23\', \'Obama(奥巴马)是姓 Brack(布拉克-貌似中文是这个)是名 Hussein(侯赛因)是中间名(middle name)国外人名字一般的顺序是 名字(first name)+中间名(如果有的话)+姓(last/family name)所以奥巴马的全名是:Brack Hussein Obama 他姓奥巴马,全名是barack Obama,外国人姓氏在后,所以他姓奥巴马奥巴马...\', \'此外,一般来说英文的 first name 是单数,last name 也是单数(两个字组成的姓或名很少见,篇幅有限就先不说这个了);唯有 middle name(s) 中间名是可以有很多个的。例如,前英国首相布莱尔的全名就是 Anthony Charles Lynton Blair,或者Anthony C. L. Blair,有两个中间名。\', \'first Name是"名",last name是"姓"。中国人和外国人名字的区别:一、位置不同:外国名:Jim Green,翻译成吉姆格林,first name是Jim ,last name 是Green。中国名:王小二,first name是小二,last name 是王。二、中国人的名字是汉字,外国人的名字是英文。重点词汇:1、first name 英 [f&...\', \'举个例子:前美国总统奥巴马 他的英文全名是Barack Hussein Obama 即贝拉克·侯赛因·奥巴马 奥巴马是他的姓,贝拉克是他的名,侯赛因是他的中间名。 姓的英语有三个family name,surname,last name 名的英语有两个given name,first name 中间名的英语是middle name 我们看到西方女子结婚后会随夫姓,比如奥巴马...\', "Biden tweeted on "Best Friends Day" Saturdayand posted an interlocking friendship bracelet with the former President Barack Obama\'s first name and his first name. The caption read: "Happy #BestFriendsDay to my friend, @BarackObama."", \'Senator Obama's first name, however, is far more interesting if wholly and totally unrelated to his character and presidential campaign. My friend Paul Ogden did a little basic research on this name. The results were so fascinating that I couldn't resist doing a bit on my own and reportin...\', \'D. Obama Barack Hussein 答案:A 解析:本题考查的是对奥巴马英文原名的记忆。根据常识和英文人名的命名习惯,英文人名通常是由名(given name)和姓(surname)组成,有时还包括中间名(middle name)。在这个问题中,奥巴马的英文原名是"Barack Hussein Obama",其中"Barack"是名,"Hussein"是中间名,"Obama...\', "Obama\'s last name is Obama. His first name is Barack. I have no clue what Michelle\'s maiden name is. Text fits Mug Tee Hoodie Free Shipping to China Order in 0:00:58 for delivery Nov 1-12 724 reviews Color The Urban Dictionary Mug ..."]'

2 文生图大模型

python 复制代码
import base64
import httpx

def image_call(
    image_url: str = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png",
    prompt: str = "请描述这张图片的主要内容。",
):
    llm = create_qwen_model(
        model=os.getenv("QWEN_VL_MODEL", QWEN_MODEL),
        base_url=os.getenv("QWEN_BASE_URL", QWEN_BASE_URL),
        api_key=os.getenv("QWEN_API_KEY", QWEN_API_KEY),
        temperature=0,
    )

    # 将图片 URL 下载并转为 base64 data URL
    response = httpx.get(image_url)
    response.raise_for_status()
    content_type = response.headers.get("content-type", "image/png").split(";")[0]
    b64_data = base64.b64encode(response.content).decode("utf-8")
    data_url = f"data:{content_type};base64,{b64_data}"

    result = llm.invoke([
        HumanMessage(content=[
            {"type": "text", "text": prompt},
            {"type": "image_url", "image_url": {"url": data_url}},
        ])
    ])
    print(result.content)
    return result


image_call()

3 edge-tts

微软 Edge TTS,完全免费、无需 API Key、支持中日韩阿等多语言。

python 复制代码
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install", "-q", "edge-tts", "nest_asyncio"], check=True)

import asyncio, tempfile, nest_asyncio
import edge_tts

nest_asyncio.apply()

async def _tts(text: str, voice: str = "zh-CN-XiaoxiaoNeural") -> str:
    communicate = edge_tts.Communicate(text, voice)
    with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as tmp:
        path = tmp.name
    await communicate.save(path)
    return path

speech_file = asyncio.run(_tts(text_to_speak))
print(f"语音文件已保存: {speech_file}")

import subprocess
# 播放生成的语音文件
subprocess.run(["afplay", speech_file], check=True)

GraphQL

一种api查询语言,类似sql,用它来查询奈飞的数据库,查找一下和星球大战相关的电影,API地址

https://swapi-graphql.netlify.app/.netlify/functions/index

bash 复制代码
! pip install httpx gql > /dev/null
! pip install gql
! pip install requests_toolbelt
python 复制代码
from langchain.agents import create_agent
from shared.llm_utils import create_qwen_model
from langchain_community.utilities import GraphQLAPIWrapper
from langchain_community.tools.graphql.tool import BaseGraphQLTool

GRAPHQL_ENDPOINT = "https://swapi-graphql.netlify.app/graphql"

llm = create_qwen_model(streaming=True)

graphql_wrapper = GraphQLAPIWrapper(
    graphql_endpoint=GRAPHQL_ENDPOINT,
    fetch_schema_from_transport=False,
)
tools = [BaseGraphQLTool(graphql_wrapper=graphql_wrapper)]

agent = create_agent(llm, tools)
print("Agent ready:", type(agent).__name__)

query = """
{
  allFilms {
    films {
      title
      director
      releaseDate
    }
  }
}
"""

# 先直接验证 GraphQL 连通性
raw_result = graphql_wrapper.run(query)
print(raw_result)
相关推荐
Restart-AHTCM8 小时前
LangChain学习之环境搭建与基础概念 - 练习(1/8)
学习·langchain
糖果店的幽灵9 小时前
LangChain 基于 Python 的技术- agent模块使用总结
开发语言·python·langchain
花千树-0109 小时前
SubAgent 基础:拥有自主工具的子代理
java·langchain·llm·agent·langgraph·subagent·harness
JavaEdge.10 小时前
07-LangChain Toolkit 实战:从工具函数到 Python Agent,再到 SQL Agent
python·sql·langchain
Artech10 小时前
[对比学习LangChain和MAF-01]基本编程模式的差异(上篇)
ai·langchain·agent·maf
wuxinyan12311 小时前
工业级大模型学习之路018:LangChain零基础入门教程(第一篇):LangChain架构与生态介绍
人工智能·python·学习·langchain
秋911 小时前
Axure RP Extension for Chrome 安装与配置完全指南:解决本地原型查看限制的深度解析与实践
chrome·axure·photoshop
赢乐1 天前
大模型学习笔记:LangChain核心组件-消息(Messages)
langchain·systemmessage·消息(messages)·角色role·humanmessage·aimessage·toolmessage
完成大叔1 天前
Agent入门:用本地模型从零搭建
开发语言·python·langchain