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
更多关于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 输出提供了便利,期待看到更多功能的发展和社区的反馈。

