Documentation
¶
Overview ¶
plugin.go 插件系统核心文件,基于 hashicorp/go-plugin 实现 提供插件的加载、管理和调用功能
plugin/result.go - 工具调用结果相关类型定义
plugin/tool.go - 工具相关类型定义和工具选项函数
Index ¶
- Variables
- func RegisterStructType(structType any)
- func ServePlugin(impl ToolPluginInterface)
- type CallToolArgs
- type CallToolResult
- func (ctr *CallToolResult) AddAudioContent(data, mimeType string, name ...string) *CallToolResult
- func (ctr *CallToolResult) AddDocumentContent(data, mimeType string, name ...string) *CallToolResult
- func (ctr *CallToolResult) AddFileContent(fileType FileType, data, mimeType string, name ...string) *CallToolResult
- func (ctr *CallToolResult) AddImageContent(data, mimeType string, name ...string) *CallToolResult
- func (ctr *CallToolResult) AddStructContent(data any, name ...string) *CallToolResult
- func (ctr *CallToolResult) AddTextContent(text string, name ...string) *CallToolResult
- func (ctr *CallToolResult) AddVideoContent(data, mimeType string, name ...string) *CallToolResult
- func (ctr *CallToolResult) SetError(isError bool) *CallToolResult
- func (ctr *CallToolResult) SetMeta(key string, value any) *CallToolResult
- type Content
- type ContentType
- type FileContent
- func NewAudioContent(data, mimeType string, name ...string) FileContent
- func NewDocumentContent(data, mimeType string, name ...string) FileContent
- func NewFileContent(fileType FileType, data, mimeType string, name ...string) FileContent
- func NewImageContent(data, mimeType string, name ...string) FileContent
- func NewVideoContent(data, mimeType string, name ...string) FileContent
- func (fc FileContent) GetType() ContentType
- func (fc FileContent) SetDocumentProperties(pageCount int, author string) FileContent
- func (fc FileContent) SetFileMetadata(metadata map[string]any) FileContent
- func (fc FileContent) SetFileProperties(size int64, encoding, checksum string) FileContent
- func (fc FileContent) SetFileURL(url string) FileContent
- func (fc FileContent) SetImageProperties(width, height int) FileContent
- func (fc FileContent) SetMediaProperties(duration float64, bitrate int) FileContent
- type FileType
- type LoadedPlugin
- type PluginInfo
- type PluginManager
- func (pm *PluginManager) CallTool(toolName string, params map[string]any) (*CallToolResult, error)
- func (pm *PluginManager) CallToolWithContext(ctx context.Context, toolName string, params map[string]any) (*CallToolResult, error)
- func (pm *PluginManager) CallToolWithStruct(toolName string, params any) (*CallToolResult, error)
- func (pm *PluginManager) CallToolWithStructContext(ctx context.Context, toolName string, params any) (*CallToolResult, error)
- func (pm *PluginManager) GetPlugin(name string) (*LoadedPlugin, bool)
- func (pm *PluginManager) GetPluginByTool(toolName string) (*LoadedPlugin, bool)
- func (pm *PluginManager) ListPlugins() []*LoadedPlugin
- func (pm *PluginManager) ListTools() []Tool
- func (pm *PluginManager) LoadAllPlugins(pluginDir string) error
- func (pm *PluginManager) LoadPlugin(pluginPath string) (*LoadedPlugin, error)
- func (pm *PluginManager) ScanPlugins(pluginDir string) ([]string, error)
- func (pm *PluginManager) Shutdown()
- type PropertyOption
- func AdditionalProperties(schema any) PropertyOption
- func Default(value any) PropertyOption
- func Description(desc string) PropertyOption
- func Enum(values ...any) PropertyOption
- func ExclusiveMaximum(max float64) PropertyOption
- func ExclusiveMinimum(min float64) PropertyOption
- func Format(format string) PropertyOption
- func Items(schema any) PropertyOption
- func MaxItems(max int) PropertyOption
- func MaxLength(max int) PropertyOption
- func MaxProperties(max int) PropertyOption
- func Maximum(max float64) PropertyOption
- func MinItems(min int) PropertyOption
- func MinLength(min int) PropertyOption
- func MinProperties(min int) PropertyOption
- func Minimum(min float64) PropertyOption
- func MultipleOf(value float64) PropertyOption
- func Pattern(pattern string) PropertyOption
- func Properties(props map[string]any) PropertyOption
- func PropertyNames(schema map[string]any) PropertyOption
- func Required() PropertyOption
- func UniqueItems(unique bool) PropertyOption
- func WithBooleanItems(opts ...PropertyOption) PropertyOption
- func WithIntegerItems(opts ...PropertyOption) PropertyOption
- func WithNumberItems(opts ...PropertyOption) PropertyOption
- func WithObjectItems(opts ...PropertyOption) PropertyOption
- func WithStringEnumItems(values []string) PropertyOption
- func WithStringItems(opts ...PropertyOption) PropertyOption
- type Result
- type StructCallToolArgs
- type StructContent
- type TextContent
- type Tool
- type ToolInputSchema
- type ToolOption
- func WithArray(name string, opts ...PropertyOption) ToolOption
- func WithBoolean(name string, opts ...PropertyOption) ToolOption
- func WithDescription(description string) ToolOption
- func WithInteger(name string, opts ...PropertyOption) ToolOption
- func WithName(name string) ToolOption
- func WithNumber(name string, opts ...PropertyOption) ToolOption
- func WithObject(name string, opts ...PropertyOption) ToolOption
- func WithString(name string, opts ...PropertyOption) ToolOption
- type ToolPlugin
- type ToolPluginGenericInterface
- type ToolPluginInterface
- type ToolPluginRPC
- func (t *ToolPluginRPC) CallTool(toolName string, params map[string]any) (*CallToolResult, error)
- func (t *ToolPluginRPC) CallToolWithStruct(toolName string, params any) (*CallToolResult, error)
- func (t *ToolPluginRPC) GetPluginInfo() (PluginInfo, error)
- func (t *ToolPluginRPC) GetTools() ([]Tool, error)
- type ToolPluginRPCServer
- func (s *ToolPluginRPCServer) CallTool(args CallToolArgs, resp *CallToolResult) error
- func (s *ToolPluginRPCServer) CallToolWithStruct(args StructCallToolArgs, resp *CallToolResult) error
- func (s *ToolPluginRPCServer) GetPluginInfo(args any, resp *PluginInfo) error
- func (s *ToolPluginRPCServer) GetTools(args any, resp *[]Tool) error
Constants ¶
This section is empty.
Variables ¶
var HandshakeConfig = plugin.HandshakeConfig{
ProtocolVersion: 1,
MagicCookieKey: "TOOL_PLUGIN",
MagicCookieValue: "tool_v1.0.0",
}
HandshakeConfig 定义了主程序和插件之间的握手配置 用于确保版本兼容性和安全性
var PluginMap = map[string]plugin.Plugin{ "tool": &ToolPlugin{}, }
PluginMap 是插件映射表 定义了可用的插件类型
Functions ¶
func RegisterStructType ¶
func RegisterStructType(structType any)
RegisterStructType 注册自定义结构体类型,用于 RPC 通信 注意:由于客户端现在会自动将结构体转换为map,通常不再需要调用此函数 此函数保留用于特殊情况下需要传递原始结构体的场景 例如:RegisterStructType(MyCustomStruct{}) 将注册 MyCustomStruct 类型
func ServePlugin ¶
func ServePlugin(impl ToolPluginInterface)
ServePlugin 启动插件服务器 这个函数应该在插件的main函数中调用 它会自动注册所有需要的 gob 类型,插件开发者不需要手动注册
Types ¶
type CallToolArgs ¶
type CallToolArgs struct {
ToolName string `json:"tool_name"` // 工具名称
Params map[string]any `json:"params"` // 调用参数
}
CallToolArgs 工具调用参数结构体
type CallToolResult ¶
type CallToolResult struct {
Result
// Content 工具调用返回的内容数组,可以包含文本、文件或结构体内容
Content []Content `json:"content"`
// IsError 表示工具调用是否以错误结束
// 如果未设置,则假定为 false(调用成功)
IsError bool `json:"isError,omitempty"`
}
CallToolResult 表示服务器对工具调用的响应
任何来自工具的错误都应该在结果对象内报告,将 `isError` 设置为 true, 而不是作为 MCP 协议级错误响应。否则,LLM 将无法看到发生了错误并自我纠正。
但是,在查找工具时的任何错误、表示服务器不支持工具调用的错误, 或任何其他异常情况,都应该作为 MCP 错误响应报告。
func NewErrorResult ¶
func NewErrorResult(errorMessage string) *CallToolResult
NewErrorResult 创建一个表示错误的工具调用结果 errorMessage: 错误信息
func (*CallToolResult) AddAudioContent ¶
func (ctr *CallToolResult) AddAudioContent(data, mimeType string, name ...string) *CallToolResult
AddAudioContent 向结果中添加音频内容(便捷方法)
func (*CallToolResult) AddDocumentContent ¶
func (ctr *CallToolResult) AddDocumentContent(data, mimeType string, name ...string) *CallToolResult
AddDocumentContent 向结果中添加文档内容(便捷方法)
func (*CallToolResult) AddFileContent ¶
func (ctr *CallToolResult) AddFileContent(fileType FileType, data, mimeType string, name ...string) *CallToolResult
AddFileContent 向结果中添加文件内容
func (*CallToolResult) AddImageContent ¶
func (ctr *CallToolResult) AddImageContent(data, mimeType string, name ...string) *CallToolResult
AddImageContent 向结果中添加图片内容(便捷方法)
func (*CallToolResult) AddStructContent ¶
func (ctr *CallToolResult) AddStructContent(data any, name ...string) *CallToolResult
AddStructContent 向结果中添加结构体内容 data 必须是结构化数据类型:自定义结构体、map、slice、array 或指向结构体的指针 如果传入不支持的类型,方法会panic并提供错误信息
func (*CallToolResult) AddTextContent ¶
func (ctr *CallToolResult) AddTextContent(text string, name ...string) *CallToolResult
AddTextContent 向结果中添加文本内容
func (*CallToolResult) AddVideoContent ¶
func (ctr *CallToolResult) AddVideoContent(data, mimeType string, name ...string) *CallToolResult
AddVideoContent 向结果中添加视频内容(便捷方法)
func (*CallToolResult) SetError ¶
func (ctr *CallToolResult) SetError(isError bool) *CallToolResult
SetError 设置工具调用为错误状态
func (*CallToolResult) SetMeta ¶
func (ctr *CallToolResult) SetMeta(key string, value any) *CallToolResult
SetMeta 设置元数据
type Content ¶
type Content interface {
// GetType 返回内容的类型
GetType() ContentType
}
Content 定义了工具调用结果中内容的接口 所有内容类型都应该实现此接口
type ContentType ¶
type ContentType string
ContentType 定义内容类型的枚举
const ( // ContentTypeText 文本内容类型 ContentTypeText ContentType = "text" // ContentTypeFile 文件内容类型(包括图片、音频、文档等所有文件) ContentTypeFile ContentType = "file" // ContentTypeStruct 结构体内容类型 ContentTypeStruct ContentType = "struct" )
type FileContent ¶
type FileContent struct {
Type ContentType `json:"type"` // 内容类型,固定为 "file"
FileType FileType `json:"fileType"` // 文件类型
Data string `json:"data"` // 文件数据(Base64编码)
MimeType string `json:"mimeType"` // MIME类型
Name string `json:"name,omitempty"` // 文件名称(可选)
Size int64 `json:"size,omitempty"` // 文件大小(字节)(可选)
// 图片特定属性
Width int `json:"width,omitempty"` // 图片宽度(仅图片文件)
Height int `json:"height,omitempty"` // 图片高度(仅图片文件)
// 音频/视频特定属性
Duration float64 `json:"duration,omitempty"` // 音频/视频时长(秒)(仅音频/视频文件)
Bitrate int `json:"bitrate,omitempty"` // 比特率(仅音频/视频文件)
// 文档特定属性
PageCount int `json:"pageCount,omitempty"` // 页数(仅文档文件)
Author string `json:"author,omitempty"` // 作者(仅文档文件)
// 通用文件属性
Encoding string `json:"encoding,omitempty"` // 文件编码
Checksum string `json:"checksum,omitempty"` // 文件校验和
URL string `json:"url,omitempty"` // 文件URL(可选)
Metadata map[string]any `json:"metadata,omitempty"` // 额外元数据
}
FileContent 表示文件内容(统一的文件类型,包括图片、音频、文档等)
func NewAudioContent ¶
func NewAudioContent(data, mimeType string, name ...string) FileContent
NewAudioContent 创建新的音频内容(便捷方法)
func NewDocumentContent ¶
func NewDocumentContent(data, mimeType string, name ...string) FileContent
NewDocumentContent 创建新的文档内容(便捷方法)
func NewFileContent ¶
func NewFileContent(fileType FileType, data, mimeType string, name ...string) FileContent
NewFileContent 创建新的文件内容
func NewImageContent ¶
func NewImageContent(data, mimeType string, name ...string) FileContent
NewImageContent 创建新的图片内容(便捷方法)
func NewVideoContent ¶
func NewVideoContent(data, mimeType string, name ...string) FileContent
NewVideoContent 创建新的视频内容(便捷方法)
func (FileContent) SetDocumentProperties ¶
func (fc FileContent) SetDocumentProperties(pageCount int, author string) FileContent
SetDocumentProperties 设置文档属性
func (FileContent) SetFileMetadata ¶
func (fc FileContent) SetFileMetadata(metadata map[string]any) FileContent
SetFileMetadata 设置文件元数据
func (FileContent) SetFileProperties ¶
func (fc FileContent) SetFileProperties(size int64, encoding, checksum string) FileContent
SetFileProperties 设置通用文件属性
func (FileContent) SetFileURL ¶
func (fc FileContent) SetFileURL(url string) FileContent
SetFileURL 设置文件URL
func (FileContent) SetImageProperties ¶
func (fc FileContent) SetImageProperties(width, height int) FileContent
SetImageProperties 设置图片属性
func (FileContent) SetMediaProperties ¶
func (fc FileContent) SetMediaProperties(duration float64, bitrate int) FileContent
SetMediaProperties 设置媒体属性(音频/视频)
type FileType ¶
type FileType string
FileType 定义文件类型的枚举
const ( // FileTypeImage 图片文件 FileTypeImage FileType = "image" // FileTypeAudio 音频文件 FileTypeAudio FileType = "audio" // FileTypeVideo 视频文件 FileTypeVideo FileType = "video" // FileTypeDocument 文档文件 FileTypeDocument FileType = "document" // FileTypeArchive 压缩文件 FileTypeArchive FileType = "archive" // FileTypeCode 代码文件 FileTypeCode FileType = "code" // FileTypeData 数据文件 FileTypeData FileType = "data" // FileTypeOther 其他文件 FileTypeOther FileType = "other" )
type LoadedPlugin ¶
type LoadedPlugin struct {
Name string // 插件名称
Path string // 插件文件路径
Client *plugin.Client // 插件客户端
Instance ToolPluginInterface // 插件实例
Info PluginInfo // 插件信息
Tools []Tool // 插件提供的工具
}
LoadedPlugin 已加载的插件信息
type PluginInfo ¶
type PluginInfo struct {
Name string `json:"name"` // 插件名称
Version string `json:"version"` // 插件版本
Description string `json:"description"` // 插件描述
Author string `json:"author"` // 插件作者
}
PluginInfo 插件基本信息结构体
type PluginManager ¶
type PluginManager struct {
// contains filtered or unexported fields
}
PluginManager 插件管理器 负责管理所有已加载的插件
func (*PluginManager) CallTool ¶
func (pm *PluginManager) CallTool(toolName string, params map[string]any) (*CallToolResult, error)
CallTool 调用指定的工具
func (*PluginManager) CallToolWithContext ¶
func (pm *PluginManager) CallToolWithContext(ctx context.Context, toolName string, params map[string]any) (*CallToolResult, error)
CallToolWithContext 带上下文调用指定的工具
func (*PluginManager) CallToolWithStruct ¶
func (pm *PluginManager) CallToolWithStruct(toolName string, params any) (*CallToolResult, error)
CallToolWithStruct 使用结构化参数调用指定的工具 这个方法允许使用强类型参数而不是 map[string]any
func (*PluginManager) CallToolWithStructContext ¶
func (pm *PluginManager) CallToolWithStructContext(ctx context.Context, toolName string, params any) (*CallToolResult, error)
CallToolWithStructContext 使用结构化参数和上下文调用指定的工具 这个方法允许使用结构体参数而不是 map[string]any 同时支持上下文取消和超时
func (*PluginManager) GetPlugin ¶
func (pm *PluginManager) GetPlugin(name string) (*LoadedPlugin, bool)
GetPlugin 获取指定名称的插件
func (*PluginManager) GetPluginByTool ¶
func (pm *PluginManager) GetPluginByTool(toolName string) (*LoadedPlugin, bool)
GetPluginByTool 根据工具名称获取对应的插件
func (*PluginManager) ListPlugins ¶
func (pm *PluginManager) ListPlugins() []*LoadedPlugin
ListPlugins 列出所有已加载的插件
func (*PluginManager) LoadAllPlugins ¶
func (pm *PluginManager) LoadAllPlugins(pluginDir string) error
LoadAllPlugins 加载所有扫描到的插件 pluginDir: 插件目录路径
func (*PluginManager) LoadPlugin ¶
func (pm *PluginManager) LoadPlugin(pluginPath string) (*LoadedPlugin, error)
LoadPlugin 加载单个插件 pluginPath: 插件文件路径 返回加载的插件信息
func (*PluginManager) ScanPlugins ¶
func (pm *PluginManager) ScanPlugins(pluginDir string) ([]string, error)
ScanPlugins 扫描指定目录下的所有.tool.plugin文件 pluginDir: 要扫描的插件目录路径 返回找到的插件文件路径列表
type PropertyOption ¶
PropertyOption 是配置Tool输入模式中属性的函数选项类型 它允许使用函数选项模式灵活配置JSON Schema属性
func AdditionalProperties ¶
func AdditionalProperties(schema any) PropertyOption
AdditionalProperties 指定对象中是否允许额外属性 或为额外属性定义模式
func ExclusiveMaximum ¶
func ExclusiveMaximum(max float64) PropertyOption
ExclusiveMaximum 设置数字的排他最大值
func ExclusiveMinimum ¶
func ExclusiveMinimum(min float64) PropertyOption
ExclusiveMinimum 设置数字的排他最小值
func PropertyNames ¶
func PropertyNames(schema map[string]any) PropertyOption
PropertyNames 为对象中的属性名称定义模式
func WithBooleanItems ¶
func WithBooleanItems(opts ...PropertyOption) PropertyOption
WithBooleanItems 配置数组的项目为布尔类型 支持的选项:Description(), Default()
func WithIntegerItems ¶
func WithIntegerItems(opts ...PropertyOption) PropertyOption
WithIntegerItems 配置数组的项目为整数类型
func WithNumberItems ¶
func WithNumberItems(opts ...PropertyOption) PropertyOption
WithNumberItems 配置数组的项目为数字类型 支持的选项:Description(), Default(), Minimum(), Maximum(), MultipleOf()
func WithObjectItems ¶
func WithObjectItems(opts ...PropertyOption) PropertyOption
WithObjectItems 配置数组的项目为对象类型
func WithStringEnumItems ¶
func WithStringEnumItems(values []string) PropertyOption
WithStringEnumItems 配置数组的项目为指定枚举的字符串类型
func WithStringItems ¶
func WithStringItems(opts ...PropertyOption) PropertyOption
WithStringItems 配置数组的项目为字符串类型 支持的选项:Description(), Default(), Enum(), MaxLength(), MinLength(), Pattern() 注意:Required() 等选项对项目模式无效,将被忽略
type Result ¶
type Result struct {
// Meta 元数据属性由协议保留,允许客户端和服务器向其响应附加额外的元数据
Meta map[string]any `json:"_meta,omitempty"`
}
Result 表示工具调用的基础结果结构 所有工具调用结果都应该包含这个基础结构
type StructCallToolArgs ¶
type StructCallToolArgs struct {
ToolName string `json:"tool_name"` // 工具名称
Params any `json:"params"` // 结构化参数(通常是map[string]any)
}
StructCallToolArgs 支持结构化参数的工具调用参数结构体 注意:由于客户端现在会将结构体转换为map,这个结构体主要用于接口完整性 实际使用中参数会是 map[string]any 类型
type StructContent ¶
type StructContent struct {
Type ContentType `json:"type"` // 内容类型,固定为 "struct"
Data any `json:"data"` // 结构体数据(可以是任意类型)
Name string `json:"name,omitempty"` // 结构体名称(可选)
Schema string `json:"schema,omitempty"` // 结构体模式定义(可选)
Format string `json:"format,omitempty"` // 数据格式(如 json、yaml 等)
}
StructContent 表示结构体内容
func NewStructContent ¶
func NewStructContent(data any, name ...string) StructContent
NewStructContent 创建新的结构体内容 data 必须是结构化数据类型:自定义结构体、map、slice、array 或指向结构体的指针 如果传入不支持的类型,函数会panic并提供错误信息
func (StructContent) SetStructFormat ¶
func (sc StructContent) SetStructFormat(format string) StructContent
SetStructFormat 设置结构体数据格式
func (StructContent) SetStructSchema ¶
func (sc StructContent) SetStructSchema(schema string) StructContent
SetStructSchema 设置结构体模式定义
type TextContent ¶
type TextContent struct {
Type ContentType `json:"type"` // 内容类型,固定为 "text"
Text string `json:"text"` // 文本内容
Name string `json:"name,omitempty"` // 内容名称(可选)
}
TextContent 表示文本内容
func NewTextContent ¶
func NewTextContent(text string, name ...string) TextContent
NewTextContent 创建新的文本内容
type Tool ¶
type Tool struct {
Name string `json:"name"` // 工具名称
Description string `json:"description"` // 工具描述
InputSchema ToolInputSchema `json:"input_schema"` // 工具输入参数 与 RawInputSchema 二选一
RawInputSchema json.RawMessage `json:"-"` // 工具输入参数的原始JSON Schema 与 InputSchema 二选一
}
Tool 表示一个工具的完整定义 包含工具的名称、描述和输入参数模式
func NewTool ¶
func NewTool(name, description string, options ...ToolOption) *Tool
NewTool 创建一个新的工具实例
type ToolInputSchema ¶
type ToolInputSchema struct {
Type string `json:"type"` // 参数类型
Properties map[string]any `json:"properties,omitempty"` // 参数属性
Required []string `json:"required,omitempty"` // 参数必填
}
ToolInputSchema 表示工具输入参数的JSON Schema结构
func (*ToolInputSchema) MarshalJSON ¶
func (tis *ToolInputSchema) MarshalJSON() ([]byte, error)
MarshalJSON 自定义ToolInputSchema的JSON序列化方法
type ToolOption ¶
type ToolOption func(*Tool)
ToolOption 是配置Tool的函数选项类型
func WithArray ¶
func WithArray(name string, opts ...PropertyOption) ToolOption
WithArray 添加数组类型属性的选项函数
func WithBoolean ¶
func WithBoolean(name string, opts ...PropertyOption) ToolOption
WithBoolean 添加布尔类型属性的选项函数
func WithDescription ¶
func WithDescription(description string) ToolOption
WithDescription 设置工具描述的选项函数
func WithInteger ¶
func WithInteger(name string, opts ...PropertyOption) ToolOption
WithInteger 添加整数类型属性的选项函数
func WithNumber ¶
func WithNumber(name string, opts ...PropertyOption) ToolOption
WithNumber 添加数字类型属性的选项函数
func WithObject ¶
func WithObject(name string, opts ...PropertyOption) ToolOption
WithObject 添加对象类型属性的选项函数
func WithString ¶
func WithString(name string, opts ...PropertyOption) ToolOption
WithString 添加字符串类型属性的选项函数
type ToolPlugin ¶
type ToolPlugin struct {
Impl ToolPluginInterface // 插件的实际实现
}
ToolPlugin 实现了 hashicorp/go-plugin 的 Plugin 接口 这是插件系统的核心,负责客户端和服务器端的创建
type ToolPluginGenericInterface ¶
type ToolPluginGenericInterface interface {
// 包含基础接口的所有方法
ToolPluginInterface
// CallToolWithStruct 使用结构化参数调用指定的工具
// params 是一个结构体,必须是可序列化的
CallToolWithStruct(toolName string, params any) (*CallToolResult, error)
}
ToolPluginGenericInterface 定义了支持结构化参数的工具插件接口 这是 ToolPluginInterface 的扩展,允许使用结构化参数
type ToolPluginInterface ¶
type ToolPluginInterface interface {
// GetTools 获取插件提供的所有工具定义
GetTools() ([]Tool, error)
// CallTool 调用指定的工具并返回结果
// 这是原始的方法,接受 map[string]any 类型的参数
CallTool(toolName string, params map[string]any) (*CallToolResult, error)
// GetPluginInfo 获取插件的基本信息
GetPluginInfo() (PluginInfo, error)
}
ToolPluginInterface 定义了工具插件需要实现的核心接口 这是插件和主程序之间的通信契约
type ToolPluginRPC ¶
type ToolPluginRPC struct {
// contains filtered or unexported fields
}
ToolPluginRPC RPC客户端实现 将接口调用转换为跨进程的RPC调用
func (*ToolPluginRPC) CallTool ¶
func (t *ToolPluginRPC) CallTool(toolName string, params map[string]any) (*CallToolResult, error)
CallTool 实现 ToolPluginInterface 接口的 CallTool 方法
func (*ToolPluginRPC) CallToolWithStruct ¶
func (t *ToolPluginRPC) CallToolWithStruct(toolName string, params any) (*CallToolResult, error)
CallToolWithStruct 实现 ToolPluginGenericInterface 接口的 CallToolWithStruct 方法 使用结构化参数调用工具
func (*ToolPluginRPC) GetPluginInfo ¶
func (t *ToolPluginRPC) GetPluginInfo() (PluginInfo, error)
GetPluginInfo 实现 ToolPluginInterface 接口的 GetPluginInfo 方法
func (*ToolPluginRPC) GetTools ¶
func (t *ToolPluginRPC) GetTools() ([]Tool, error)
GetTools 实现 ToolPluginInterface 接口的 GetTools 方法
type ToolPluginRPCServer ¶
type ToolPluginRPCServer struct {
Impl ToolPluginInterface // 实际的插件实现
}
ToolPluginRPCServer RPC服务器端实现 接收RPC调用并转发给实际的插件实现
func (*ToolPluginRPCServer) CallTool ¶
func (s *ToolPluginRPCServer) CallTool(args CallToolArgs, resp *CallToolResult) error
CallTool 处理来自客户端的 CallTool RPC 调用
func (*ToolPluginRPCServer) CallToolWithStruct ¶
func (s *ToolPluginRPCServer) CallToolWithStruct(args StructCallToolArgs, resp *CallToolResult) error
CallToolWithStruct 处理来自客户端的 CallToolWithStruct RPC 调用 这个方法处理结构化参数的工具调用 注意:由于客户端已经将结构体转换为map,这个方法现在实际上不会被调用 保留此方法是为了接口完整性
func (*ToolPluginRPCServer) GetPluginInfo ¶
func (s *ToolPluginRPCServer) GetPluginInfo(args any, resp *PluginInfo) error
GetPluginInfo 处理来自客户端的 GetPluginInfo RPC 调用
Directories
¶
| Path | Synopsis |
|---|---|
|
plugin/timetool
command
plugin/example/plugin/timetool/tool.go
|
plugin/example/plugin/timetool/tool.go |