拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Langchain工具封装

Langchain工具封装 解决LLM的局限性:大语言模型存在“幻觉”问题(生成虚假信息),且无法直接访问实时数据或执行具体操作扩展能力边界通过工具集成Agent可以获得计算、API访问数据库查询等实际能力模块化设计将不同功能封装为独立工具便于维护和复用tool装饰器将普通Python函数转换为LangChain工具自动生成JSON Schema描述工具的输入参数和功能fromlangchain.toolsimporttooltooldefmultiply(a:int,b:int)-int:两个数的乘积#docstring文档字符串returna*bprint(multiply.name)print(multiply.description)print(multiply.args)print(multiply.args_schema.model_json_schema())multiply 两个数的乘积 {a: {title: A, type: integer}, b: {title: B, type: integer}} {description: 两个数的乘积, properties: {a: {title: A, type: integer}, b: {title: B, type: integer}}, required: [a, b], title: multiply, type: object}天气查询工具importrequestsdefget_weather(city:str)-str: 调用实时天气API返回温度及天气状况 参数 city城市名称如北京 urlhttps://eolink.o.apispace.com/456456/weather/v001/nowpayload{areacode:101010100}headers{X-APISpace-Token:ove3f6z5sp4pnav9ljs2w6ra33b7hdvk}responserequests.request(GET,url,paramspayload,headersheaders)return(response.text)get_weather(北京){status:0,result:{location:{areacode:101010100,name:北京,country:中国,path:北京,北京市,北京市,中国},realtime:{text:晴,code:00,temp:25.0,feels_like:25,rh:57,wind_class:1级,wind_speed:1.3,wind_dir:南风,wind_angle:199,prec:0.0,prec_time:2026-09-21 19:00:00,clouds:0,vis:18400,pressure:1012,dew:15,uv:0,weight:5,brief:略显闷热,detail:略微偏热适当穿得清凉些},last_update:2026-09-21 19:34}}#获取城市编码importpandasaspd city_dfpd.read_csv(city.csv)defget_city_code(city_name:str)-int: 获取城市编码 #优先匹配区县matchcity_df[city_df[district]city_name]ifnotmatch.empty:returnmatch.iloc[0][areacode/城市ID]matchcity_df[city_df[city]city_name]ifnotmatch.empty:returnmatch.iloc[0][areacode/城市ID]matchcity_df[city_df[city].str.contains(city_name,naFalse)]ifnotmatch.empty:returnmatch.iloc[0][areacode/城市ID]return101010100#默认北京importrequestsfromlangchain.toolsimporttooltooldefget_weather(city:str)-str: 调用实时天气API返回温度及天气状况 参数 city城市名称如北京 urlhttps://eolink.o.apispace.com/456456/weather/v001/nowcity_codeget_city_code(city)payload{areacode:city_code}headers{X-APISpace-Token:ove3f6z5sp4pnav9ljs2w6ra33b7hdvk}responserequests.request(GET,url,paramspayload,headersheaders)dataresponse.json()tempdata.get(result).get(realtime).get(temp)wddata.get(result).get(realtime).get(text)returnf天气:{wd},温度:{temp}℃resultget_weather.invoke({city:哈尔滨})print(result)天气:晴,温度:10.6℃Langchain—模型调用工具key2d50c6c36eb846c7abc30c9da80ff523.xSIeJYw8qoaKIBLcfromlangchain_community.chat_modelsimportChatZhipuAIimportos os.environ[ZHIPUAI_API_KEY]key chatChatZhipuAI(modelglm-4,temperature0.5,#模型温度值在0-1之间值越小随机性越低)C:\Users\Jasmine\AppData\Local\Temp\ipykernel_31572\1315615643.py:3: DeprecationWarning: langchain-community is being sunset and is no longer actively maintained. See https://github.com/langchain-ai/langchain-community/issues/674 for details and migration guidance toward standalone integration packages. from langchain_community.chat_models import ChatZhipuAIfromlangchain.agentsimportcreate_agent#创建工具对象tools[get_weather]agentcreate_agent(modelchat,toolstools,system_prompt你是一个天气查询助手。 当用户询问天气时调用 get_weather 工具查询实时天气。请使用中文回答并简洁说明天气状况和温度。)responseagent.invoke({messages:[{role:user,content:今天北京天气如何}]})print(response[messages][-1].content)今天北京的天气是晴天温度为23.9℃。天气很不错呢Agent调用多个工具importre#正则表达式模块,从字符串中按照某种规则寻找内容tooldefmultiply(input_str:str)-int:两个数的乘积, args: input_str:输入的字符串格式为a*b returns:int #docstring文档字符串matchre.findall(r\d,input_str)#在字符串中寻找所有符合正则表达式的内容re.findall(正则表达式, 字符串)#\d:一个数字 :前面的内容出现一次或者多次iflen(match)2:a,bmap(int,match)#map函数将列表中的元素依次传递给int,转为int类型returna*bfromlangchain.agentsimportcreate_agent#创建工具对象tools[get_weather,multiply]agentcreate_agent(modelchat,toolstools,system_prompt你是一个智能助手。 1. 当用户询问天气时调用 get_weather 工具查询实时天气。 2. 当用户需要计算两个数的乘积时调用 multiply 工具。 3. 如果问题不需要使用工具就直接回答用户。 4. 请使用中文回答。)test_inputs[今天北京天气如何,2x3等于几,帮我修修电脑]forquestionintest_inputs:print(用户,question)responseagent.invoke({messages:[{role:user,content:question}]})print(Agent,response[messages][-1].content)用户 今天北京天气如何 Agent 今天北京天气晴朗温度为23.7℃是个不错的天气呢 用户 2x3等于几 Agent 2乘以3等于6。 用户 帮我修修电脑 Agent 我理解您需要帮助修理电脑但我目前可以使用的工具只能查询天气和进行数学计算无法直接帮助您修理电脑。 不过我可以为您提供一些常见的电脑故障排查建议 **常见问题及解决方法** 1. **电脑无法开机** - 检查电源连接 - 尝试更换电源线 - 检查电源按钮是否正常 2. **电脑运行缓慢** - 关闭不必要的程序 - 清理磁盘空间 - 重启电脑 - 检查是否有病毒 3. **网络连接问题** - 重启路由器 - 检查网络线缆连接 - 更新网卡驱动 4. **蓝屏死机** - 记录错误代码 - 检查最近安装的软件或驱动 - 运行系统诊断 如果您能告诉我具体的电脑问题我可以提供更有针对性的建议。如果问题比较复杂建议您联系专业的电脑维修人员。
返回列表