client

package
v0.5.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 13, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package client 提供 Hexagon 框架的 Fluent API

本包实现类似 Spring AI ChatClient 的流畅 API 风格。

设计借鉴:

  • Spring AI: ChatClient Fluent API
  • LangChain: 链式调用

使用示例:

result, err := hexagon.Chat().
    Model("gpt-4").
    System("你是一个助手").
    User("你好").
    Tools(weatherTool).
    Temperature(0.7).
    MaxTokens(1000).
    Call(ctx)

// 流式调用
stream, err := hexagon.Chat().
    Model("gpt-4").
    User("写一首诗").
    Stream().
    Call(ctx)

Index

Constants

This section is empty.

Variables

View Source
var ErrNoProvider = fmt.Errorf("client: 未配置 LLM Provider")

ErrNoProvider 表示 ChatClient 没有可用的 LLM Provider。

当通过 Chat() 便捷入口创建客户端但未事先调用 SetDefaultProvider 设置默认 Provider 时,Call/CallStream 会返回包装了本错误的结果,而非直接 nil 解引用 panic。

Functions

func SetDefaultProvider

func SetDefaultProvider(provider llm.Provider)

SetDefaultProvider 设置默认 Provider

Types

type ChatChunk

type ChatChunk struct {
	Content   string
	Delta     string
	ToolCalls []llm.ToolCall
	Done      bool
}

ChatChunk 流式块

type ChatClient

type ChatClient struct {
	// contains filtered or unexported fields
}

ChatClient Fluent 风格的聊天客户端

线程安全:ChatClient 内部使用 mu 保护共享可变的 *chatConfig,因此在同一实例上 并发调用 Fluent 方法(如 User/Assistant/Metadata)不会触发 "concurrent map writes" 之类的 fatal error。但 Fluent builder 语义本身是"在单实例上累积状态",并发写入的 最终状态顺序仍不确定,建议典型用法是每个 goroutine 使用独立的 ChatClient 实例。

func Chat

func Chat() *ChatClient

Chat 创建聊天客户端(使用默认 Provider)

func ChatWith

func ChatWith(provider llm.Provider) *ChatClient

ChatWith 创建聊天客户端(指定 Provider)

func NewChatClient

func NewChatClient(provider llm.Provider) *ChatClient

NewChatClient 创建聊天客户端

func (*ChatClient) AddMessage

func (c *ChatClient) AddMessage(role llm.Role, content string) *ChatClient

AddMessage 添加消息

func (*ChatClient) Assistant

func (c *ChatClient) Assistant(content string) *ChatClient

Assistant 添加助手消息

func (*ChatClient) Call

func (c *ChatClient) Call(ctx context.Context) (*ChatResponse, error)

Call 执行调用

func (*ChatClient) CallStream

func (c *ChatClient) CallStream(ctx context.Context) (*StreamResponse, error)

CallStream 流式调用

func (*ChatClient) MaxTokens

func (c *ChatClient) MaxTokens(max int) *ChatClient

MaxTokens 设置最大 token 数

func (*ChatClient) Messages

func (c *ChatClient) Messages(messages []llm.Message) *ChatClient

Messages 设置消息列表

注意:此处对传入切片做防御性拷贝(defensive copy),避免 ChatClient 与调用方共享 同一底层数组,从而杜绝后续 User()/Assistant() 的 append 写穿调用方原始切片的别名副作用。

func (*ChatClient) Metadata

func (c *ChatClient) Metadata(key string, value any) *ChatClient

Metadata 设置元数据

func (*ChatClient) Model

func (c *ChatClient) Model(model string) *ChatClient

Model 设置模型

func (*ChatClient) Stop

func (c *ChatClient) Stop(sequences ...string) *ChatClient

Stop 设置停止序列

func (*ChatClient) Stream

func (c *ChatClient) Stream() *ChatClient

Stream 启用流式输出

func (*ChatClient) System

func (c *ChatClient) System(prompt string) *ChatClient

System 设置系统提示

func (*ChatClient) Temperature

func (c *ChatClient) Temperature(temp float64) *ChatClient

Temperature 设置温度

func (*ChatClient) Tools

func (c *ChatClient) Tools(tools ...tool.Tool) *ChatClient

Tools 设置工具

func (*ChatClient) TopP

func (c *ChatClient) TopP(p float64) *ChatClient

TopP 设置 TopP

func (*ChatClient) User

func (c *ChatClient) User(content string) *ChatClient

User 添加用户消息

type ChatResponse

type ChatResponse struct {
	Content      string
	ToolCalls    []llm.ToolCall
	Usage        llm.Usage
	FinishReason string
	Metadata     map[string]any
}

ChatResponse 聊天响应

type PromptClient

type PromptClient struct {
	// contains filtered or unexported fields
}

PromptClient Prompt 模板客户端

func NewPromptClient

func NewPromptClient(template string) *PromptClient

NewPromptClient 创建 Prompt 客户端

func Prompt

func Prompt(template string) *PromptClient

Prompt 创建 Prompt 客户端

func (*PromptClient) Render

func (p *PromptClient) Render() (string, error)

Render 渲染模板

使用 {key} 形式的占位符:将模板中所有 {key} 替换为对应变量的字符串值。 变量值通过 toolkit conv.String 统一转换为字符串,支持任意类型。 未在 vars 中出现的占位符保持原样不替换。

func (*PromptClient) ToChat

func (p *PromptClient) ToChat(provider llm.Provider) *ChatClient

ToChat 转换为聊天客户端

func (*PromptClient) Var

func (p *PromptClient) Var(key string, value any) *PromptClient

Var 设置变量

func (*PromptClient) Vars

func (p *PromptClient) Vars(vars map[string]any) *PromptClient

Vars 批量设置变量

type StreamResponse

type StreamResponse struct {
	Stream   *stream.StreamReader[*ChatChunk]
	Metadata map[string]any
}

StreamResponse 流式响应

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL