当前位置: 首页 > 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)

http://www.xdnf.cn/news/223741.html

相关文章:

  • 【网工第6版】第6章 网络安全③
  • Fiori学习专题二十五:Remote OData Service
  • 基于CATIA参数化球体建模的自动化插件开发实践——NX建模之球体命令的参考与移植
  • Transformer-CVPR2025-线性注意力-Breaking the Low-Rank Dilemma of Linear Attention
  • 【AI】DeepSeek 流程图 / 时序图制作,Word 排版错乱问题,文字转直观图形
  • 机器学习-07-分类评估函数进阶案例
  • 【数学建模国奖速成系列】优秀论文绘图复现代码(四)
  • Access开发:轻松一键将 Access 全库表格导出为 Excel
  • 游戏引擎学习第250天:# 清理DEBUG GUID
  • 栈与队列 Part 7
  • String、StringBuffer、StringBuilder 的区别
  • SpringMVC知识点总结(速查速记)
  • SIFT特征点检测
  • 产品经理.产品设计.产品设计工具
  • 什么是美颜SDK?美颜SDK安卓与iOS端开发指南
  • 【11408学习记录】英语书信通知写作模板大全:5个高分句式+使用场景解析,速存每日一句拆解练习!
  • 组网技术知识点
  • electron+vite+vue3 快速入门教程
  • C++23 std::invoke_r:调用可调用 (Callable) 对象 (P2136R3)
  • Postgresql源码(144)LockRelease常规锁释放流程分析
  • Linux -- SysremV 共享内存通信
  • 环形链表的约瑟夫问题
  • 从生成到上线:飞算JavaAl工程化能力拆解(含K8s部署脚本自动生成)
  • STM32printf重定向到串口含armcc和gcc两种方案
  • 高并发内存池(五):性能测试与性能优化
  • Java实现归并排序算法
  • 《机器学习中的过拟合与模型复杂性:理解与应对策略》
  • 量化交易之数学与统计学基础2.3——线性代数与矩阵运算 | 线性方程组
  • windows 下 oracle 数据库的备份与还原
  • SQL Server连接异常 证书链是由不受信任的颁发机构颁发的