120 lines
3.6 KiB
Markdown
120 lines
3.6 KiB
Markdown
# AgentScope Skills Demo
|
||
|
||
这是一个最小可运行示例,演示如何:
|
||
|
||
- 使用 llama.cpp 的 OpenAI 兼容接口连接 `OpenAIChatModel`
|
||
- 为 `ReActAgent` 注册多个本地 skill
|
||
- 让智能体在任务中优先使用 skill,并通过 Python 工具执行代码
|
||
- 在 Windows 桌面上执行截图、点击、输入等 GUI 自动化操作
|
||
|
||
## 文件结构
|
||
|
||
```text
|
||
.
|
||
├── demo_with_skills.py
|
||
├── requirements.txt
|
||
└── skills/
|
||
├── python_hello_skill/
|
||
│ └── SKILL.md
|
||
└── windows_gui_operator/
|
||
└── SKILL.md
|
||
```
|
||
|
||
运行 GUI skill 后,截图会保存在 `artifacts/screenshots/` 目录。
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## 运行示例
|
||
|
||
```bash
|
||
python demo_with_skills.py
|
||
```
|
||
|
||
默认会进入交互式对话模式,你可以在终端中持续输入消息与模型对话:
|
||
|
||
```text
|
||
user> 你好
|
||
user> 请用 Python 打印 Hello World
|
||
user> /exit
|
||
```
|
||
|
||
脚本默认会隐藏模型的 thinking 过程,只显示最终可见回复。如果你想调试 thinking 输出,可以运行:
|
||
|
||
```bash
|
||
python demo_with_skills.py --show-thinking
|
||
```
|
||
|
||
默认模式下,工具调用过程中的 `tool_use` 和 `tool_result` JSON 也会被隐藏,只保留最终自然语言回复。
|
||
|
||
当前版本会以可读形式打印 ReAct 过程,例如 `Action` 和 `Observation`,但不会直接输出原始 thinking 块和原始 JSON。
|
||
|
||
如果你想检查模型每一轮 assistant 原始返回了什么 block,可以运行:
|
||
|
||
```bash
|
||
python demo_with_skills.py --debug-model-output
|
||
```
|
||
|
||
这会额外打印每轮模型的原始 content blocks,便于确认截图返回后模型是否真的在消费图片相关内容。
|
||
|
||
## Windows GUI Skill
|
||
|
||
新增的 `windows_gui_operator` skill 会要求智能体按 ReAct 方式执行 GUI 操作:
|
||
|
||
- 先获取当前活动窗口并截图
|
||
- 再执行鼠标或键盘动作
|
||
- 关键步骤后再次截图确认
|
||
- 对输入类操作,必要时通过剪贴板做结果确认
|
||
|
||
当前脚本已注册以下 GUI 工具:
|
||
|
||
- `save_desktop_screenshot`
|
||
- `get_mouse_position`
|
||
- `left_click`
|
||
- `type_text`
|
||
- `press_keys`
|
||
- `hotkey`
|
||
- `wait_seconds`
|
||
- `get_active_window_title`
|
||
- `get_clipboard_text`
|
||
|
||
如果当前模型支持多模态,`save_desktop_screenshot` 会把本地截图文件同时作为图片结果返回给模型,模型可以直接基于截图继续判断下一步动作。
|
||
|
||
GUI skill 默认采用“观察 -> 执行一个最小动作 -> 复查 -> 必要时重试”的单步闭环,而不是预先规划固定长步骤后一路执行。
|
||
|
||
当前版本对 Windows GUI 的约束是:桌面任务必须通过键盘和鼠标完成,不提供直接启动应用或直接打开网址的非 GUI 工具。
|
||
|
||
如果你只想发送一条消息并立即退出,可以运行:
|
||
|
||
```bash
|
||
python demo_with_skills.py --message "请用 Python 打印 Hello World"
|
||
```
|
||
|
||
如果你只想确认 skill 注册是否成功,而不立即调用远程模型,可以运行:
|
||
|
||
```bash
|
||
python demo_with_skills.py --skip-agent-run
|
||
```
|
||
|
||
如果你需要替换 llama.cpp 服务地址或模型名,可以通过环境变量覆盖:
|
||
|
||
```bash
|
||
set LLAMA_CPP_BASE_URL=http://127.0.0.1:8000/v1
|
||
set LLAMA_CPP_MODEL_NAME=your-model-name
|
||
set LLAMA_CPP_API_KEY=EMPTY
|
||
python demo_with_skills.py
|
||
```
|
||
|
||
## 说明
|
||
|
||
示例脚本默认使用以下 llama.cpp OpenAI 兼容接口配置,并支持通过环境变量覆盖:
|
||
|
||
- Base URL: `http://yyplab.site:8033/v1`
|
||
- Model: `Qwen3.5-122B-A10B-Q4_K_M-00001-of-00003.gguf`
|
||
- API Key: `EMPTY`
|
||
|
||
如果你本地的 AgentScope 版本中,文件读取工具名称与脚本里的候选名称不同,请在 `demo_with_skills.py` 中补充对应函数名。
|