当前位置: 首页 > news >正文

自定义Tool

通过Langchain自定义Tool。API Hub - 幂简集成这里面有很多API,通过request进行调用

百度天气接口百度地图-百万开发者首选的地图服务商,提供专属的行业解决方案

自定义Schema(Pydantic)、Tool类

weather_district_id.csv 点击蓝色字体下载,存储行政区编码

ApiPost 测试Http请求

查询行政区编码

通过 weather_district_id.csv 查询区域编码。

import csv
from typing import Type, Optional
import requests
from langchain_core.callbacks import CallbackManagerForToolRun
from langchain_core.messages import HumanMessage
from langchain.tools.base import BaseTool
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import chat_agent_executor
from pydantic import BaseModel, Fielddef find_code(csv_file_path, district_name) -> str:"""根据区域或者城市的名字,返回该区域的编码:param csv_file_path::param district_name::return:"""district_map = {}#读取区域 和 编号 放入字典,然后在通过 字典.get返回编码with open(csv_file_path, mode='r', encoding='utf-8') as f:csv_reader = csv.DictReader(f)for row in csv_reader:district_code = row['districtcode'].strip()district = row['district'].strip()if district not in district_map:district_map[district] = district_code# 没有的话,返回Nonereturn district_map.get(district_name, None)

定义Schema类(Pydantic模型)

用于定义数据格式,这里用作规范 Tool的输入(由LLM生成),description相当于提示词。

class WeatherInputArgs(BaseModel):"""Input的Schema类"""location: str = Field(..., description='用于查询天气的位置信息')# location: str = Field(..., description='用于查询天气的位置信息')

定义Tool

Langchain构建Agent-Tavily检索工具

Tool的定义,可以参考,Tavily的源码

##args_schema: Type[WeatherInputArgs]

##——定义args_schema类型WeatherInputArgs

---

_run:获取编码——》整合url,request请求——》返回data(具体返回格式,参考各API文档)——》解析data并return。

class WeatherTool(BaseTool):"""查询实时天气的工具"""#类属性。name = 'weather_tool'description = '可以查询任意位置的当前天气情况'args_schema: Type[WeatherInputArgs] = WeatherInputArgsdef _run(self,location: str,run_manager: Optional[CallbackManagerForToolRun] = None,) -> str:"""就是调用工具的时候,自动执行的函数"""district_code = find_code('weather_district_id.csv', location)print(f'需要查询的{location}, 的地区编码是: {district_code}')url = f'https://api.map.baidu.com/weather/v1/?district_id={district_code}&data_type=now&ak=qdkcGt9AtcYfIsArwnzGz4PS09feivdH'# 发送请求response = requests.get(url)data = response.json()text = data["result"]["now"]['text']temp = data["result"]["now"]['temp']feels_like = data["result"]["now"]['feels_like']rh = data["result"]["now"]['rh']wind_dir = data["result"]["now"]['wind_dir']wind_class = data["result"]["now"]['wind_class']return f"位置: {location} 当前天气: {text},温度: {temp} °C,体感温度: {feels_like} °C,相对湿度:{rh} %,{wind_dir}:{wind_class}"

测试

Langchain构建Agent-CSDN博客和此内容相似。

    #绑定工具
    tools = [WeatherTool()]

这里tools 用 数组,是以为,日后可以tools=[tool1,tool2,.....]

if __name__ == '__main__':# print(find_code('weather_district_id.csv', '洞口'))# 创建模型model = ChatOpenAI(model='glm-4-0520',temperature='0.6',api_key='0884a4262379e6b9e98d08be606f2192.TOaCwXTLNYo1GlRM',base_url='https://open.bigmodel.cn/api/paas/v4/')#绑定工具tools = [WeatherTool()]#创建Agent执行器agent_executor = chat_agent_executor.create_tool_calling_executor(model, tools)resp = agent_executor.invoke({'messages': [HumanMessage(content='中国的首都是哪个城市?')]})print(resp['messages'])resp2 = agent_executor.invoke({'messages': [HumanMessage(content='北京天气怎么样?')]})print(resp2['messages'])print(resp2['messages'][2].content)

相关文章:

  • 【Android】文件导出到本地或者U盘
  • 前端笔记-Element-Plus
  • 在线服务器都有哪些用途?
  • pytorch对应gpu版本是否可用判断逻辑
  • UE5 项目迁移 注意事项记录
  • redis 数据类型新手练习系列——List类型
  • 【Bootstrap V4系列】学习入门教程之 布局
  • 【Prometheus-OracleDB Exporter安装配置指南,开机自启】
  • JMeter WebSocket 压测详细步骤(支持 ws+proto 协议)
  • intellij idea最新版git开启Local Changes
  • C/C++核心机制深度解析:指针、结构体与动态内存管理(面试精要)
  • 408考研逐题详解:2009年第5题
  • 基于C#开发的适合Windows开源文件管理器
  • OpenCV实战教程:从零开始的计算机视觉之旅
  • 定时任务xxl-job国产化改造,适配磐维数据库(PostgreSQL)
  • 服务器丢包率测试保姆级教程:从Ping到网络打流仪实战
  • 使用 Vue 开发 VS Code 插件前端页面(上)
  • 如何使用CAN分析仪验证MCU CAN错误机制
  • 基于vue框架的电影院网上售票系统49iu6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • kotlin中Triple的作用
  • 光明日报社论:用你我的匠心,托举起繁盛的中国
  • 澎湃回声丨23岁小伙“被精神病8年”续:今日将被移出“重精”管理系统
  • 兴业银行一季度净赚超237亿降逾2%,营收降逾3%
  • 上汽集团一季度净利润30.2亿元,同比增长11.4%
  • 何立峰出席驻沪中央金融机构支持上海建设国际金融中心座谈会并讲话
  • 中方发布《不跪!》视频传递何种信息?外交部回应