chore: mini-openclaw 初始版本
Next.js 前端 + FastAPI/LangChain 后端透明 agent平台 - 含 .gitignore, 敏感文件(sessions数据/.env/venv等)已排除 - 待后续添加 trajectory 自进化机制
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
---
|
||||
name: get_weather
|
||||
description: 获取指定城市的实时天气信息
|
||||
---
|
||||
|
||||
# 获取天气技能
|
||||
|
||||
## 使用场景
|
||||
当用户询问某个城市的天气情况时使用此技能。
|
||||
|
||||
## 执行步骤
|
||||
|
||||
1. 从用户消息中提取城市名称
|
||||
2. 使用 `fetch_url` 工具访问 wttr.in 天气服务:
|
||||
```
|
||||
fetch_url("https://wttr.in/{城市名}?format=j1&lang=zh")
|
||||
```
|
||||
3. 解析返回的 JSON 数据,提取关键信息:
|
||||
- 当前温度
|
||||
- 天气状况
|
||||
- 湿度
|
||||
- 风速
|
||||
4. 用自然语言向用户汇报天气情况
|
||||
|
||||
## 示例
|
||||
|
||||
用户:「查询北京的天气」
|
||||
|
||||
执行流程:
|
||||
1. 提取城市:北京 (Beijing)
|
||||
2. 调用:`fetch_url("https://wttr.in/Beijing?format=j1&lang=zh")`
|
||||
3. 解析 JSON 结果
|
||||
4. 回复:「北京当前天气:晴,温度 25°C,湿度 40%,东南风 3 级。」
|
||||
|
||||
## 注意事项
|
||||
- 城市名建议使用英文拼写以提高准确性
|
||||
- 如果 wttr.in 不可用,可尝试使用 `python_repl` 调用备用 API
|
||||
@@ -0,0 +1,109 @@
|
||||
---
|
||||
name: get_weather_open
|
||||
description: 使用 OpenWeather API 获取指定城市的实时天气信息
|
||||
---
|
||||
|
||||
# 获取天气技能 (OpenWeather API 版本)
|
||||
|
||||
## 使用场景
|
||||
当用户询问某个城市的天气情况时使用此技能。使用 OpenWeather API 替代 wttr.in,提供更稳定和详细的天气信息。
|
||||
|
||||
## 前提条件
|
||||
1. 需要 OpenWeather API 密钥
|
||||
2. 需要在环境变量中设置 OPENWEATHER_API_KEY
|
||||
|
||||
## 执行步骤
|
||||
|
||||
1. 从用户消息中提取城市名称
|
||||
2. 使用 `python_repl` 工具编写 Python 代码调用 OpenWeather API:
|
||||
```python
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 从环境变量获取 API 密钥
|
||||
api_key = os.getenv("OPENWEATHER_API_KEY")
|
||||
city = "城市名" # 从用户输入中提取
|
||||
|
||||
if not api_key:
|
||||
print("错误:未设置 OPENWEATHER_API_KEY 环境变量")
|
||||
else:
|
||||
# 调用 OpenWeather API
|
||||
url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric&lang=zh_cn"
|
||||
response = requests.get(url)
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
# 提取天气信息
|
||||
weather = {
|
||||
"城市": data["name"],
|
||||
"国家": data["sys"]["country"],
|
||||
"温度": f"{data['main']['temp']}°C",
|
||||
"体感温度": f"{data['main']['feels_like']}°C",
|
||||
"天气状况": data["weather"][0]["description"],
|
||||
"湿度": f"{data['main']['humidity']}%",
|
||||
"气压": f"{data['main']['pressure']} hPa",
|
||||
"风速": f"{data['wind']['speed']} m/s",
|
||||
"风向": data["wind"].get("deg", "未知"),
|
||||
"能见度": f"{data.get('visibility', 0) / 1000} km" if data.get('visibility') else "未知"
|
||||
}
|
||||
print(json.dumps(weather, ensure_ascii=False, indent=2))
|
||||
else:
|
||||
print(f"错误:无法获取天气信息,状态码:{response.status_code}")
|
||||
print(f"错误信息:{response.text}")
|
||||
```
|
||||
|
||||
3. 解析返回的 JSON 数据,提取关键信息
|
||||
4. 用自然语言向用户汇报天气情况
|
||||
|
||||
## 示例
|
||||
|
||||
用户:「查询北京的天气」
|
||||
|
||||
执行流程:
|
||||
1. 提取城市:北京 (Beijing)
|
||||
2. 在 python_repl 中执行上述代码,将 city 替换为 "Beijing"
|
||||
3. 解析返回的 JSON 结果
|
||||
4. 回复:「北京当前天气:晴,温度 25°C,体感温度 26°C,湿度 40%,风速 3.5 m/s。」
|
||||
|
||||
## 备用方案
|
||||
如果 OpenWeather API 不可用,可以回退到使用 fetch_url 访问 wttr.in:
|
||||
```python
|
||||
import requests
|
||||
try:
|
||||
# 尝试 OpenWeather API
|
||||
# ...
|
||||
except Exception as e:
|
||||
# 回退到 wttr.in
|
||||
fallback_url = f"https://wttr.in/{city}?format=j1&lang=zh"
|
||||
fallback_response = requests.get(fallback_url)
|
||||
# 解析 wttr.in 数据
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
1. **API 密钥**:必须先在环境变量中设置 OPENWEATHER_API_KEY
|
||||
2. **城市格式**:建议使用英文城市名,OpenWeather API 支持中文但英文更可靠
|
||||
3. **单位系统**:使用公制单位 (metric)
|
||||
4. **语言**:设置为中文 (lang=zh_cn)
|
||||
5. **错误处理**:妥善处理 API 调用失败的情况
|
||||
6. **速率限制**:OpenWeather 免费版有调用限制,注意不要频繁调用
|
||||
|
||||
## 环境变量设置
|
||||
在 .env 文件中添加:
|
||||
```
|
||||
OPENWEATHER_API_KEY=your_api_key_here
|
||||
```
|
||||
|
||||
## 获取 API 密钥
|
||||
1. 访问 https://openweathermap.org/api
|
||||
2. 注册账号
|
||||
3. 在 Dashboard 中创建 API 密钥
|
||||
4. 免费版每天有 60 次调用限制
|
||||
|
||||
## 数据字段说明
|
||||
- main.temp: 当前温度 (摄氏度)
|
||||
- main.feels_like: 体感温度
|
||||
- weather[0].description: 天气描述
|
||||
- main.humidity: 湿度百分比
|
||||
- wind.speed: 风速 (米/秒)
|
||||
- visibility: 能见度 (米)
|
||||
Reference in New Issue
Block a user