Programmatic Tool Calling (PTC) 让 LLM 生成的 Python 代码可以直接调用 Aster 工具,实现更强大的编程能力。
# 搜索文件
files = await Glob(pattern="*.go", path=".")
# 读取文件
content = await Read(path=files[0])
# 处理并写入
result = content.upper()
await Write(path="output.txt", content=result)
package main
import (
"context"
"github.com/astercloud/aster/pkg/provider"
"github.com/astercloud/aster/pkg/tools"
"github.com/astercloud/aster/pkg/tools/bridge"
"github.com/astercloud/aster/pkg/tools/builtin"
)
func main() {
// 1. 创建工具生态系统
registry := tools.NewRegistry()
builtin.RegisterAll(registry)
toolBridge := bridge.NewToolBridge(registry)
codeExec := builtin.NewCodeExecuteToolWithBridge(toolBridge)
// 2. 配置 PTC 工具
tools := []provider.ToolSchema{
{
Name: "CodeExecute",
Description: codeExec.Description(),
InputSchema: codeExec.InputSchema(),
AllowedCallers: []string{"direct"},
},
{
Name: "Read",
Description: "读取文件内容",
InputSchema: map[string]any{/*...*/},
// 关键: 允许在 Python 代码中调用
AllowedCallers: []string{"direct", "code_execution_20250825"},
},
}
// 3. 使用 Provider
provider, _ := provider.NewAnthropicProvider(&types.ModelConfig{
Provider: "anthropic",
Model: "claude-3-5-sonnet-20241022",
APIKey: os.Getenv("ANTHROPIC_API_KEY"),
})
// 4. 执行任务
response, _ := provider.Complete(context.Background(),
[]types.Message{{
Role: types.RoleUser,
Content: "用 Python 读取 README.md 并统计单词数",
}},
&provider.StreamOptions{Tools: tools},
)
}
AllowedCallers 字段控制工具在哪些上下文中可以被调用。AllowedCallers: []string{"direct"}
AllowedCallers: []string{"code_execution_20250825"}
AllowedCallers: []string{"direct", "code_execution_20250825"}
| 工具 | 功能 | Python 示例 |
|---|---|---|
Read | 读取文件 | await Read(path="file.txt") |
Write | 写入文件 | await Write(path="out.txt", content="data") |
Glob | 文件搜索 | await Glob(pattern="*.go") |
Grep | 内容搜索 | await Grep(pattern="TODO") |
Bash | 执行命令 | await Bash(command="ls -la") |
无需 API Key,直接测试 PTC 基础设施:
cd examples/ptc/local-test
go run main.go
title: 完整文档 icon: i-lucide-book-open to: /tools/ptc
深入了解 PTC 架构和高级用法
title: 示例程序 icon: i-lucide-code to: /examples
查看更多实战示例
title: 故障排除 icon: i-lucide-help-circle to: /tools/ptc#常见问题
解决常见问题 :: ::