Golang结构化LLM输出工具 - Instructor-go使用指南

Golang结构化LLM输出工具 - Instructor-go使用指南 大家好!

我是 instructor-go 的核心贡献者,这是一个用于将结构化输出转换为 Go 结构体的 Go 包。它是流行的 Python 库 Instructor 的移植版本。

该包目前支持 OpenAI、Anthropic、Cohere 和 Ollama(通过 OpenAI API 支持)。

该包仍处于相对早期的开发阶段,非常希望能获得一些反馈!


更多关于Golang结构化LLM输出工具 - Instructor-go使用指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang结构化LLM输出工具 - Instructor-go使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢分享!instructor-go 确实是一个非常有用的工具,它通过结构化的方式简化了从 LLM 获取输出的过程。以下是一个使用 instructor-go 与 OpenAI 结合,将 LLM 输出解析为 Go 结构体的示例:

package main

import (
    "context"
    "fmt"
    "github.com/instructor-ai/instructor-go"
    openai "github.com/sashabaranov/go-openai"
)

// 定义输出结构体
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    City string `json:"city"`
}

func main() {
    // 初始化 OpenAI 客户端
    client := openai.NewClient("your-api-key")
    
    // 创建 instructor 客户端
    ic := instructor.FromOpenAI(client)
    
    // 准备消息
    messages := []openai.ChatCompletionMessage{
        {
            Role:    openai.ChatMessageRoleUser,
            Content: "提取信息:张三,25岁,来自北京",
        },
    }
    
    // 调用 LLM 并解析为结构体
    var person Person
    err := ic.ChatCompletion(
        context.Background(),
        openai.ChatCompletionRequest{
            Model:    openai.GPT3Dot5Turbo,
            Messages: messages,
        },
        &person,
    )
    
    if err != nil {
        panic(err)
    }
    
    // 输出解析结果
    fmt.Printf("姓名: %s\n", person.Name)  // 输出: 张三
    fmt.Printf("年龄: %d\n", person.Age)   // 输出: 25
    fmt.Printf("城市: %s\n", person.City)  // 输出: 北京
}

这个示例展示了如何从文本中提取结构化信息并映射到 Go 结构体。instructor-go 通过类型安全的方简化了 LLM 输出的处理,避免了手动解析 JSON 的繁琐工作。

对于更复杂的场景,比如嵌套结构体或数组,instructor-go 也能很好地处理:

type Company struct {
    Name     string   `json:"name"`
    Employees []Person `json:"employees"`
    Location string   `json:"location"`
}

func extractCompanyInfo() {
    client := openai.NewClient("your-api-key")
    ic := instructor.FromOpenAI(client)
    
    messages := []openai.ChatCompletionMessage{
        {
            Role:    openai.ChatMessageRoleUser,
            Content: "公司:ABC科技,位于上海,员工:李四(30岁),王五(28岁)",
        },
    }
    
    var company Company
    err := ic.ChatCompletion(
        context.Background(),
        openai.ChatCompletionRequest{
            Model:    openai.GPT3Dot5Turbo,
            Messages: messages,
        },
        &company,
    )
    
    if err != nil {
        panic(err)
    }
    
    fmt.Printf("公司: %s\n", company.Name)        // 输出: ABC科技
    fmt.Printf("地点: %s\n", company.Location)    // 输出: 上海
    fmt.Printf("员工数: %d\n", len(company.Employees)) // 输出: 2
}

instructor-go 目前支持多个 LLM 提供商,包括 Anthropic 和 Cohere,用法类似:

// 使用 Anthropic
anthropicClient := anthropic.NewClient("your-api-key")
ic := instructor.FromAnthropic(anthropicClient)

// 使用 Cohere  
cohereClient := cohere.NewClient("your-api-key")
ic := instructor.FromCohere(cohereClient)

这个库确实为 Go 开发者处理 LLM 输出提供了便利,期待看到更多功能的发展和社区的反馈。

回到顶部