紧跟科技潮流【AI Agent】: AI知识库+天气API,你的天气预报小助手已上线!

开场白

Hello,大家好,AI时代,要么驾驭AI,要么被AI淘汰。

本文以开源Dify平台为基础,通过Dify平台构建AI Agent构建你的AI天气小助手。


安装大模型


安装Dify


本地部署:


Windows 系统安装Docker环境

在Windows环境下我们可以通过DockerDesktop 来安装。直接去官网下载对应的版本即可。


图片


我们需要拉取dify的GitHub的代码 https://github.com/langgenius/dify


图片

然后进入到Docker目录,执行这个代码

docker-compose up

安装Docker环境 MAC 和linux

bash <(curl -sSl https://cdn.jsdelivr.net/gh/SuperManito/LunuxMirrors@main/DockerInstallation.sh)

安装Docker Compose

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

执行查看Docker-compose版本

docker-compose --version

图片


说明安装成功了


docker-compse拉取镜像很慢,执行下面的代码

sudo tee /etc/docker/daemon.json <<-'EOF'{     "registry-mirrors": [         "https://do.nark.eu.org",         "https://dc.j8.work",         "https://docker.m.daocloud.io",         "https://dockerproxy.com",         "https://docker.mirrors.ustc.edu.cn",         "https://docker.nju.edu.cn"     ]}EOF
sudo systemctl daemon-reload    # 重新加载 systemd 的配置文件systemctl restart docker        # 重启docker

然后去GitHub上拉取dify的代码。解压后进入到docker目录中

docker-compose up -d

然后在地址栏中输入 http://localhost/install 就可以访问了

图片


我们先设置管理员的相关信息。设置后再登录


图片


Dify关联Ollama


Dify 是通过Docker部署的,而Ollama 是运行在本地电脑的,得让Dify能访问Ollama 的服务。


在Dify项目-docker-找到.env文件,在末尾加上下面的配置:


# 启用自定义模型CUSTOM_MODEL_ENABLED=true# 指定 Olama 的 API地址(根据部署环境调整IP)OLLAMA_API_BASE_URL=host.docker.internal:11434

然后在模型中配置


图片

在设置页面--Ollama--添加模型,如下:


图片


你也可以添加在线模型,去相应模型供应商网站田间key即可,我这里就添加了硅基流动的


图片



准备天气查询的接口


我们使用高德地图的天气查询接口,,访问如下地址:


https://lbs.amap.com/api/webservice/guide/api/weatherinfo


图片


创建天气查询的key


图片

下载城市编码知识库

https://lbs.amap.com/api/webservice/download


图片



构建Dify 工作流


工作流如下:

1、我们通过知识库+大模型将用户输入的城市名称替换为城市编码

2、我们使用大模型提取出来的城市编码通过http节点请求高德的天气接口获取天气信息

3、通过大模型总结分析天气信息,完成天气预报小助手搭建

图片


1、创建知识库

城市编码知识库录入,点击知识库——>新建知识库


图片


选择上述步骤下载的城市编码文件


图片


检索模式选择混合检索,其他保持默认,关于RAG的相关知识可以上网搜索补充


图片


当我们看到知识库状态为可用的时候说明知识已经录入完成


图片


进行召回测试


图片


我们看到得分排名在0.4以上答案相对准确,你就可以在检索设置这里调整Score值,保证只输出和问题相关的答案。


图片


2、创建工作流


点击工作室,创建空白应用


图片


选择工作流,给应用命名


图片



新增变量用于用户输入城市名称


图片


填写变量名称


图片


点击开始后面的+添加知识库检索节点


图片


配置知识库检索参数


图片


可以点击运行查看数据输入和输出结构


图片


进行追踪调试


图片


让大模型把城市编码提取出来,添加一个大模型节点


图片


选择需要执行操作的大模型,这里在系统提示词里面引入知识库,你只需 通过 / 即可把前面节点的输出内容引用进来


当前LLM 的系统提示词是:

请替换成你自己的变量,不要粗暴复制粘贴

你是一个城市地区的adcode值获取工具,请告诉我,我的问题中相关城市地区的adcode值。adcode值的来源是{{#context#}}

用户提示词是:

请替换成你自己的变量,不要粗暴复制粘贴

请你输出{{#1744454889149.cityname#}} 的adcode值


图片


我们在调试的过程中可以看到,大模型会有幻觉输出的值有时候不准确,接下来我们添加代码运行模块提取adcode值


图片


使用LLM 的输出作为代码执行模块的输入,arg1 引入llm 的输出,把arg2 删除


代码如下

import re
def main(arg1: str) -> dict: # 匹配adcode值后的6位数字,考虑中间的非数字字符 match = re.search(r'adcode值\D*(\d{6})', arg1) postal_code = match.group(1) if match else '' return { "result": postal_code }


图片


代码处理的值可能有两种情况,有值和没有值,添加一个条件判断做判断


图片


判断代码执行的结果


图片


如果不为空,则请求高德的接口


图片


添加两个http 模块


图片


http 的地址为高德天气的接口地址

https://restapi.amap.com/v3/weather/weatherInfo

city 的值为代码执行的 result

第一个http 模块 extensions的值是base


图片


第二个http模块extensions的值填  all


图片


然后我们把两个http请求的结果作为 大模型的输入,让大模型根据查询到的天气信息进行天气预报


图片


在系统提示词里面通过变量引入http请求的输出结果


图片


在用户提示词里面引入用户问题


图片


添加结束节点,完成工作流


图片


使用LLM2 的输出结果进行结束


图片


回过头去看条件分支的else

添加一个大模型进行结束

图片


让模型回答 没有找到您所说的地区名,请重新输入。

系统提示词是

你只需要直接回复:没有找到您所说的地区名,请重新输入。

图片


添加一个结束 作为else 的结束


图片


添加结束节点作为输出LLM3 的回复


图片


图片


发布之后可以在探索中打开直接使用


图片


输入你想要查询天气的城市


图片



更多玩法等你解锁,你就是未来的AI专家

微信  findingnoone