Programmatic Tool Calling

快速开始

5分钟学会使用 Programmatic Tool Calling

PTC 快速开始

什么是 PTC?

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)

前置条件

安装 Python 依赖

pip install aiohttp

设置 API Key

export ANTHROPIC_API_KEY="your-api-key"

基础示例

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 字段控制工具在哪些上下文中可以被调用。
AllowedCallers: []string{"direct"}

可用工具

工具功能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
✅ 如果看到测试通过,说明 PTC 配置正确!

下一步


title: 完整文档 icon: i-lucide-book-open to: /tools/ptc


深入了解 PTC 架构和高级用法

::card

title: 示例程序 icon: i-lucide-code to: /examples


查看更多实战示例

::card

title: 故障排除 icon: i-lucide-help-circle to: /tools/ptc#常见问题


解决常见问题 :: ::