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

零风险!零付费!我把 AI 接入微信群,爸妈玩嗨了~附教程(上):高德 API 接入

最近聊天机器人非常火,我的微信AI助手系列,也陆续给大家分享了四种实现。

很多小伙伴问:这玩意儿有啥用?

今天突发奇想:何不给父母做个 24 小时陪伴式 AI ,接入微信呢?平时不能在他们身边,让小助理替我尽尽孝,顺便也让他们零距离感受下 AI 的力量。

说干就干!

花了一天时间,总算把这个 bot 给捏出了模样。

邀请进群,我给简单做个示范,大伙跟它聊的不亦乐乎,我反倒成了局外人…

群聊截图:

私聊截图:

今天,给大家分享下 bot 制作过程,希望对感兴趣的你有所启发。

为了大部分同学能快速上手,基于全程零风险,无费用的原则,整体技术方案主要包括三个部分:

  • 本地生活服务API:为了减少大模型幻觉,同时提供和本地生活相关的可靠信息,考虑接入本地生活服务接口,这里我们采用高德开放平台提供的API,实现天气查询、路径规划、景点推荐等功能。
  • 免费的大模型API:尽管免费的 API 有速率限制,不过对于个人使用而言,完全足够!之前给大家盘点了免费且靠谱的大模型 API,统一封装,任性调用,赶紧用起来!
  • 微信机器人开发框架:之前分享过三种微信机器人的搭建方案,要么账号容易被封,要么需付费使用,有没有零风险,零付费的方案?有,还不了解的小伙伴,赶紧去👉搭建微信机器人的第4种方式,免费开源,轻量高效.

由于篇幅较长,本教程将分为上下篇:本篇将首先介绍高德开放平台的各类API的功能和使用;下篇将介绍如何结合本地生活服务API免费的大模型API,打造一个有学识更有温度的微信AI机器人

友情提醒:注册小号使用,严禁用于违法用途(如发送广告/群发/诈骗、色情、政治等内容),否则封号是早晚的事哦。

1. 高德开放平台注册

控制台:https://console.amap.com/dev/index

首先前往控制台,创建一个应用,然后申请一个 key:

这里,可以查看各个 API 的调用量和并发量限制:

2. API 功能和调用

API 文档:https://lbs.amap.com/api/webservice/summary

本节,将介绍 bot 中会使用到的各类 API。

我们首先将请求部分的代码进行封装,以便后面调用:

def get_api_response(url, params):try:response = requests.get(url, params=params)response.raise_for_status()  # 检查请求是否成功data = response.json()  # 解析JSON响应return dataexcept requests.exceptions.RequestException as e:print(f"请求失败: {e}")return None

2.1 地理/逆地理编码API

由于后续功能都需要地址信息,所以首先需要了解下这个 API。

什么是地理/逆地理编码?

  • 地理编码:将地址转换为经纬度坐标,支持名胜景区、建筑物名称。例:北京市朝阳区阜通东大街6号:116.480881,39.989410;
  • 逆地理编码:将经纬度转换为地址,且返回附近周边的 POI 信息等。

核心请求参数介绍:

  • address:结构化地址,遵循:国家、省份、城市、区县、城镇、乡村、街道、门牌号码、大厦,如:北京市朝阳区阜通东大街6号。
  • city:指定查询的城市。

下面给出示例代码:

def get_adcode(address='', city=''):url = "https://restapi.amap.com/v3/geocode/geo"if not address:address = cityparams = {"address": address,"city": city,"key": api_key}data = get_api_response(url, params)return data

建议直接输入 address,会自动匹配到对应的城市,给大家看下北京海淀的请求结果:

{"status": "1","info": "OK","infocode": "10000","count": "1","geocodes": [{"formatted_address": "北京市海淀区","country": "中国","province": "北京市","citycode": "010","city": "北京市","district": "海淀区","township": [],"neighborhood": {"name": [],"type": []},"building": {"name": [],"type": []},"adcode": "110108","street": [],"number": [],"location": "116.297700,39.959893","level": "区县"}]
}

2.2 天气查询API

核心请求参数介绍:

  • key:控制台申请的key;
  • city:城市编码 adcode,可参考城市编码表,不过不建议将编码直接写死在程序中,而是通过地理/逆地理编码等线上服务获取adcode;
  • extensions:气象类型,base:返回实况天气,all:返回预报天气(未来四天)

有了上面的地理/逆地理编码API,我们可以根据输入的地址信息,查询到 adcode。为此,天气查询的请求代码可以编写如下:

def get_weather(address='', adcode='', extensions='all'):url = "https://restapi.amap.com/v3/weather/weatherInfo"if address:res = get_adcode(address=address)if res and res.get('status') == '1':adcode = res.get('geocodes')[0].get('adcode')if not adcode:return Noneparams = {"key": api_key,"city": adcode,"extensions": extensions}data = get_api_response(url, params)return data

注:街道没有独有的 adcode,均继承父类(区县)的 adcode。

给大家看下天气的请求结果:

{"status": "1","count": "1","info": "OK","infocode": "10000","lives": [{"province": "上海","city": "杨浦区","adcode": "310110","weather": "晴","temperature": "33","winddirection": "西","windpower": "≤3","humidity": "58","reporttime": "2024-08-26 17:01:14","temperature_float": "33.0","humidity_float": "58.0"}]
}

2.3 路径规划API

推荐使用路线规划接口2.0,支持驾车、公交、步行、骑行、电动车路线规划。

驾车路线规划

核心请求参数介绍:

  • origin:起点经纬度,可以根据地理编码API获得
  • destination:终点经纬度,可以根据地理编码API获得
  • strategy:算路策略,默认同高德地图APP

因为获取地理位置信息比较通用,所以可以先把这个功能抽象出来:

def get_address(origin='', ret_city=False):res = get_adcode(address=origin)data = {}if res and res.get('status') == '1':data['location'] = res.get('geocodes')[0].get('location')if ret_city:data['city'] = res.get('geocodes')[0].get('city')return data

驾车路线规划的示例代码如下:

def get_driving(origin='', destination='', strategy=32):url = "https://restapi.amap.com/v5/direction/driving"data_origin = get_address(origin)data_destination = get_address(destination)if not (data_origin and data_destination):return Noneparams = {"key": api_key,"origin": data_origin['location'],"destination": data_destination['location'],"strategy": strategy}data = get_api_response(url, params)return data

给大家看下请求结果:

结果中,给出了预估的打车费用,并返回三条路径规划。

步行路线规划

核心请求参数介绍:

  • origin:起点经纬度,可以根据地理编码API获得
  • destination:终点经纬度,可以根据地理编码API获得
  • alternative_route:返回路线条数,默认返回一条

步行路线规划的示例代码如下:

def get_walking(origin='', destination='', alternative_route=1):url = "https://restapi.amap.com/v5/direction/walking"address = get_address(origin, destination)if not address:return Noneparams = {"key": api_key,"origin": address[0],"destination": address[1],"alternative": alternative_route}data = get_api_response(url, params)return data

请求结果如下:

其中,distance 代表距离,单位-米;duration 代表耗时,单位-秒。

骑行路线规划

和步行路线规划的使用方式基本一致,一起看下请求结果:

公交路线规划

核心请求参数介绍:

  • origin:起点经纬度,可以根据地理编码API获得
  • destination:终点经纬度,可以根据地理编码API获得
  • alternative_route:返回路线条数,默认返回一条
  • city1: 必填,起点所在城市
  • city2: 必填,终点所在城市,二者相同代表同城,不同代表跨城

示例代码如下:

def get_bus(origin='', destination='', strategy=0, AlternativeRoute=1):url = "https://restapi.amap.com/v5/direction/transit/integrated"data_origin = get_address(origin, ret_city=True)data_destination = get_address(destination, ret_city=True)if not (data_origin and data_destination):return Noneres = get_adcode(city=data_origin['city'])c1_code = res.get('geocodes')[0].get('citycode') if res and res.get('status') == '1' else ''res = get_adcode(city=data_destination['city'])c2_code = res.get('geocodes')[0].get('citycode') if res and res.get('status') == '1' else ''if not c1_code or not c2_code:return Noneparams = {"key": api_key,"origin": data_origin['location'],"destination": data_destination['location'],"city1": c1_code,"city2": c2_code,"strategy": strategy,"AlternativeRoute": AlternativeRoute}data = get_api_response(url, params)return data

请求结果如下:

2.4 搜索POI API

搜索POI有两种方式:

  • 关键词搜索;
  • 基于地址的周边搜索
关键词搜索:

核心请求参数介绍:

  • keywords:地点关键词,需要被检索的地点文本信息。
  • region:可输入 citycode,adcode,cityname;cityname 仅支持城市级别和中文,如“北京市”
  • city_limit: 为 true 时,仅召回 region 对应区域内数据;

示例代码:

def get_poi_keyword(keyword='', region='', city_limit=False):url = "https://restapi.amap.com/v5/place/text"res = get_adcode(city=region)adcode = res.get('geocodes')[0].get('adcode') if res and res.get('status') == '1' else ''city_limit = True if adcode else Falseparams = {"key": api_key,"keywords": keyword,"region": adcode,"citylimit": city_limit}data = get_api_response(url, params)return data
data = get_poi_keyword(keyword='医院', region='上海杨浦区')

请求结果如下:

基于地址的周边搜索

核心请求参数介绍:

  • keywords:地点关键词,需要被检索的地点文本信息。
  • location:必填,中心点坐标
  • region:可输入 citycode,adcode,cityname;cityname 仅支持城市级别和中文,如“北京市”
  • city_limit: 为 true 时,仅召回 region 对应区域内数据;

示例代码如下:

def get_poi_around(keyword='', region='', city_limit=False):url = "https://restapi.amap.com/v5/place/around"res = get_adcode(city=region)adcode = res.get('geocodes')[0].get('adcode') if res and res.get('status') == '1' else ''location = res.get('geocodes')[0].get('location') if res and res.get('status') == '1' else ''city_limit = True if adcode else Falseparams = {"key": api_key,"keywords": keyword,"location": location,"region": adcode,"citylimit": city_limit}data = get_api_response(url, params)return data
data = get_poi_around(keyword='医院', region='上海东方明珠')

请求结果如下:

写在最后

随着小爱(AI)的加入,家庭群变得活跃起来了。爸妈和这个可爱的 bot 交流,毫无距离感。

所以,AI 不应是冰冷的代码,而应是温暖人心、传递温情的桥梁。

本文带你玩转高德开放平台 API,有了这些API加持,小助手才能不仅陪爸妈聊天解闷,还能提供各种实用的本地生活信息。

下篇,我们将结合大模型 API,让这个 bot 不仅懂得多,还要有温度。敬请期待!

如果本文对你有帮助,不妨点个免费的赞收藏备用,转发给身边的朋友。

最后,别忘了时不时陪陪父母,毕竟再智能的AI也替代不了你的陪伴。


为了方便大家交流,新建了一个 AI 交流群,欢迎感兴趣的小伙伴加入。

小爱也在群里,想进群体验的朋友,公众号后台「联系我」即可,拉你进群。


http://www.mrgr.cn/news/18588.html

相关文章:

  • 微信小程序请求数据接口封装
  • Linux驱动(三):字符设备驱动之杂项
  • 浏览器百科:网页存储篇-如何在Chrome中打开Cookie(二)
  • 【Linux】自定义子进程(第十篇)
  • TCP和UDP的区别
  • Linux 用户和组管理(详细)
  • 芯片解决方案--SL8541e-OpenHarmony适配方案
  • 笔记:《利用Python进行数据分析》之透视表和交叉表
  • 开源提示词让LLM更具创造力
  • 模型评价之提升图(Lift Chart)绘制
  • 工厂模式和策略模式的区别,以及java代码示例
  • IPv6的部署会影响现有IPv4网络的运行吗
  • 全新模版|The Sandbox 迎来生存游戏!
  • ET6框架(十三)ET-EUI循环列表及红点树
  • React 创建和嵌套组件
  • [AcWing]-多重背包问题-动态规划
  • ClickHouse 二进制特征值怎么转化为字符串
  • (第四十一天)
  • Mulesoft 开发笔记
  • 2024爆火全网大模型书籍:《从零构建大型语言模型》星标17.8k