上一篇,我们讲了如何用Langchain来搭建一个通义大语言模型应用。今天小编就来讲一讲如何用Langchain来搭建一个查询天气的智能体。
本文的大模型用的是智谱AI,采用Python代码来实现。我们需要先在官方网站申请一个开发的Key,在接下来的代码中需要用到。
1、代码
全程上干货,代码如下:
文件名:weather.py
import requests
import pandas as pd
from langchain.tools import tool
from langchain.agents import create_react_agent,AgentExecutor
from langchain import hub
import os
from langchain_community.chat_models import ChatZhipuAI
# @tool("get_weather")
# @tool
@tool(description="根据城市名称获取天气信息")
def getWeather(cityName: str) -> str:
"""根据城市名称获取天气信息。"""
cityCode = get_city_code(cityName)
url = "https://eolink.o.apispace.com/456456/weather/v001/now"
payload = {"areacode" : cityCode,"lonlat" : "116.407526,39.904030"}
headers = {
"X-APISpace-Token":"wndgc4vuwxxxx"
}
response = requests.get(url, params=payload, headers=headers)
print(response.text)
data = response.json()
temp = data.get("result").get("realtime").get("temp")
wd = data.get("result").get("realtime").get("text")
# return response.text
return f"当前{cityName}的温度是{temp}度,天气是{wd}"
def get_city_code(city_name:str) ->int:
"""根据城市名称获取城市代码。"""
city_df = pd.read_csv("./city.csv")
# 获取城市编码
# 优先匹配区县
match = city_df[city_df['district']==city_name]
if not match.empty:
return match.iloc[0]['areacode/城市ID']
#匹配城市
match = city_df[city_df['city']==city_name]
if not match.empty:
return match.iloc[0]['areacode/城市ID']
#匹配省份
match = city_df[city_df['city'].str.contains(city_name,na=False)]
if not match.empty:
return match.iloc[0]['areacode/城市ID']
#默认北京
return 101010100
key= '35a6xxxx' #这里的key需要替换成你自己的key
chat = ChatZhipuAI(
api_key=key,
model="glm-4",
streaming=False, # 确保 streaming=False
temperature=0.7
)
#创建工具对象
tools = [getWeather]
#获取提示词
prompt = hub.pull("hwchase17/react")
#创建智能体
agent = create_react_agent(llm=chat,tools=tools,prompt=prompt)
#创建AgentExecutor,运行智能体
agent_executor = AgentExecutor(agent=agent, tools=tools,verbose=True)
#verbose代表输出日志
#调用智能体
response = agent_executor.invoke({'input':'今天北京天气如何?'})
print(response)
2、运行展示
在命令行中运行代码:python3 weather.py

全部评论