Skip to content

Commit 2ea0cfe

Browse files
committed
docs: 新增工具和场景示例文档(6个示例)
## 新增内容 ### 工具使用示例(3个) 1. **文件操作工具** - 使用文件系统工具读写文件 - 5 种文件系统工具详解 - 配置文件管理、代码重构、日志分析场景 - 沙箱隔离说明 2. **HTTP 请求工具** - 使用 HTTP 工具调用 REST API - GET/POST/PUT/DELETE 请求示例 - GitHub API 实战演示 - 带认证的 API 调用 - 速率限制和错误处理 3. **自定义工具** - 创建和使用自定义工具 - 天气查询工具 - 数据库查询工具 - 计算器工具 - 开发最佳实践(5个关键点) - 异步工具和带状态工具示例 ### 实用场景示例(3个) 1. **代码审查** - 使用 Agent 自动审查代码 - 专业的代码审查提示词 - 审查报告格式(总体评价、具体问题、改进建议) - 多语言代码支持 - Git 集成示例 2. **数据分析** - 使用 Agent 分析和可视化数据 - CSV/JSON 数据分析 - 统计指标计算 - 数据对比和趋势分析 - 生成可视化图表 3. **智能客服机器人** - 构建完整的客服机器人系统 - 知识库查询工具 - 多轮对话处理 - 意图识别和情感分析 - 工单系统集成 - 完整的对话示例演示 ## 特点 - 每个示例 100-200 行代码 - 包含完整可运行代码和输出示例 - 提供实用场景和扩展建议 - 交叉引用其他文档 - 强调最佳实践 总计新增 6 个示例,累计 13 个快速示例 参考 Mastra 项目的实用示例组织方式
1 parent 9d58fe2 commit 2ea0cfe

6 files changed

Lines changed: 1693 additions & 0 deletions

File tree

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
---
2+
title: 文件操作工具
3+
description: 使用文件系统工具读写文件
4+
---
5+
6+
# 文件操作工具示例
7+
8+
展示如何使用内置的文件系统工具进行文件操作。
9+
10+
## 完整代码
11+
12+
```go
13+
package main
14+
15+
import (
16+
"context"
17+
"fmt"
18+
"log"
19+
"os"
20+
21+
"github.com/wordflowlab/agentsdk/pkg/agent"
22+
"github.com/wordflowlab/agentsdk/pkg/provider"
23+
"github.com/wordflowlab/agentsdk/pkg/sandbox"
24+
"github.com/wordflowlab/agentsdk/pkg/store"
25+
"github.com/wordflowlab/agentsdk/pkg/tools"
26+
"github.com/wordflowlab/agentsdk/pkg/tools/builtin"
27+
"github.com/wordflowlab/agentsdk/pkg/types"
28+
)
29+
30+
func main() {
31+
ctx := context.Background()
32+
33+
// 创建工具注册表
34+
toolRegistry := tools.NewRegistry()
35+
builtin.RegisterAll(toolRegistry)
36+
37+
// 创建依赖
38+
deps := &agent.Dependencies{
39+
ToolRegistry: toolRegistry,
40+
SandboxFactory: sandbox.NewFactory(),
41+
ProviderFactory: provider.NewMultiProviderFactory(),
42+
Store: store.NewMemoryStore(),
43+
TemplateRegistry: agent.NewTemplateRegistry(),
44+
}
45+
46+
// 创建 Agent
47+
ag, err := agent.Create(ctx, &types.AgentConfig{
48+
TemplateID: "assistant",
49+
ModelConfig: &types.ModelConfig{
50+
Provider: "anthropic",
51+
Model: "claude-sonnet-4-5",
52+
APIKey: os.Getenv("ANTHROPIC_API_KEY"),
53+
},
54+
Tools: []string{"filesystem"}, // 只启用文件系统工具
55+
}, deps)
56+
if err != nil {
57+
log.Fatal(err)
58+
}
59+
defer ag.Close()
60+
61+
// 测试不同的文件操作
62+
tasks := []string{
63+
"创建一个 config.json 文件,内容是 {\"app\": \"demo\", \"version\": \"1.0\"}",
64+
"读取 config.json 文件的内容",
65+
"列出当前目录的所有 .json 文件",
66+
"在 config.json 中搜索包含 'demo' 的内容",
67+
}
68+
69+
for i, task := range tasks {
70+
fmt.Printf("\n========== 任务 %d ==========\n", i+1)
71+
fmt.Printf("请求: %s\n\n", task)
72+
73+
result, err := ag.Chat(ctx, task)
74+
if err != nil {
75+
log.Printf("错误: %v", err)
76+
continue
77+
}
78+
79+
fmt.Printf("响应: %s\n", result.Message.Content)
80+
}
81+
}
82+
```
83+
84+
## 可用的文件系统工具
85+
86+
### 1. filesystem_read
87+
读取文件内容。
88+
89+
```go
90+
// Agent 会调用
91+
{
92+
"path": "config.json"
93+
}
94+
```
95+
96+
### 2. filesystem_write
97+
写入文件。
98+
99+
```go
100+
// Agent 会调用
101+
{
102+
"path": "output.txt",
103+
"content": "Hello World"
104+
}
105+
```
106+
107+
### 3. filesystem_list
108+
列出目录内容。
109+
110+
```go
111+
// Agent 会调用
112+
{
113+
"path": ".",
114+
"recursive": false
115+
}
116+
```
117+
118+
### 4. filesystem_delete
119+
删除文件。
120+
121+
```go
122+
// Agent 会调用
123+
{
124+
"path": "temp.txt"
125+
}
126+
```
127+
128+
### 5. filesystem_search
129+
搜索文件内容。
130+
131+
```go
132+
// Agent 会调用
133+
{
134+
"path": ".",
135+
"pattern": "TODO",
136+
"file_pattern": "*.go"
137+
}
138+
```
139+
140+
## 运行示例
141+
142+
```bash
143+
export ANTHROPIC_API_KEY="sk-ant-xxx"
144+
go run main.go
145+
```
146+
147+
## 输出示例
148+
149+
```
150+
========== 任务 1 ==========
151+
请求: 创建一个 config.json 文件,内容是 {"app": "demo", "version": "1.0"}
152+
153+
响应: 我已经创建了 config.json 文件,内容如下:
154+
```json
155+
{
156+
"app": "demo",
157+
"version": "1.0"
158+
}
159+
```
160+
161+
========== 任务 2 ==========
162+
请求: 读取 config.json 文件的内容
163+
164+
响应: config.json 文件的内容是:
165+
```json
166+
{
167+
"app": "demo",
168+
"version": "1.0"
169+
}
170+
```
171+
172+
========== 任务 3 ==========
173+
请求: 列出当前目录的所有 .json 文件
174+
175+
响应: 当前目录中的 .json 文件有:
176+
- config.json (56 bytes)
177+
- package.json (342 bytes)
178+
179+
========== 任务 4 ==========
180+
请求: 在 config.json 中搜索包含 'demo' 的内容
181+
182+
响应: 在 config.json 中找到 1 处匹配:
183+
第 2 行: "app": "demo"
184+
```
185+
186+
## 实用场景
187+
188+
### 配置文件管理
189+
190+
```go
191+
result, _ := ag.Chat(ctx, "读取 config.yaml 并将端口从 8080 改为 9000")
192+
// Agent 会:
193+
// 1. 读取 config.yaml
194+
// 2. 修改端口
195+
// 3. 写回文件
196+
```
197+
198+
### 代码重构
199+
200+
```go
201+
result, _ := ag.Chat(ctx, "在所有 .go 文件中将 'oldFunc' 替换为 'newFunc'")
202+
// Agent 会:
203+
// 1. 搜索所有 .go 文件
204+
// 2. 查找 'oldFunc'
205+
// 3. 逐个替换并保存
206+
```
207+
208+
### 日志分析
209+
210+
```go
211+
result, _ := ag.Chat(ctx, "分析 app.log 中的错误信息,统计每种错误的数量")
212+
// Agent 会:
213+
// 1. 读取 app.log
214+
// 2. 提取错误信息
215+
// 3. 统计和分类
216+
```
217+
218+
## 沙箱隔离
219+
220+
文件系统工具在沙箱中运行,确保安全:
221+
222+
```go
223+
ag, err := agent.Create(ctx, &types.AgentConfig{
224+
// ...
225+
Sandbox: &types.SandboxConfig{
226+
Kind: types.SandboxKindLocal,
227+
WorkDir: "./workspace", // 限制在此目录
228+
},
229+
}, deps)
230+
231+
// Agent 只能访问 ./workspace 目录下的文件
232+
```
233+
234+
## 相关资源
235+
236+
- [内置工具详解](../../guides/tools/builtin)
237+
- [Tools API 文档](../../api-reference/tools-api)
238+
- [Filesystem 中间件](../../guides/middleware/builtin#filesystem)

0 commit comments

Comments
 (0)