- 支持
OpenAI API - 支持的供应商:
兼容OpenAI API 的所有供应商、AzureOpenAI、Ollama、DeepSeek、Gemini、BaiLian
package main
import (
"context"
"os"
"log/slog"
"github.com/chaitin/ModelKit/v2/consts"
"github.com/chaitin/ModelKit/v2/domain"
"github.com/chaitin/ModelKit/v2/usecase"
"github.com/cloudwego/eino/schema"
)
func main() {
ctx := context.Background()
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
AddSource: true,
Level: slog.LevelInfo,
}))
mk := usecase.NewModelKit(logger)
chatModel, err := mk.GetChatModel(ctx, &domain.ModelMetadata{
Provider: consts.ModelProviderOpenAI,
ModelName: "gpt-4o-mini",
BaseURL: "https://api.openai.com/v1",
APIKey: "sk-xxxxxx",
})
if err != nil {
logger.Error("get chat model failed", "err", err)
}
}字段说明(ModelMetadata):
provider:模型提供商,取值如OpenAI、AzureOpenAI、Ollama、DeepSeek、Gemini、BaiLian。model_name:对话模型 ID,例如gpt-4o-mini、deepseek-chat。base_url:OpenAI 兼容客户端会自动调用/chat/completions;不要在base_url中包含该路径。Ollama若以/v1结尾走兼容模式,否则走原生。api_key:鉴权密钥,作为Authorization: Bearer <API_KEY>使用。api_version:仅AzureOpenAI需要,未设置将默认2024-10-21。api_header:可选的自定义请求头(key=value按行拼接)。 高级参数:max_tokens:最大生成长度,默认为模型最大值。temperature:采样温度,建议与TopP二选一,范围0-2,默认0.0。top_p:核采样,建议与Temperature二选一,范围0-1,默认1.0。stop:停止序列。presence_penalty:存在惩罚,范围-2到2,默认0。frequency_penalty:频率惩罚,范围-2到2,默认0。response_format:结构化响应格式(OpenAI 兼容)。seed:确定性采样。logit_bias:Logit 偏置。
t := float32(0.2)
chatModel, _ := mk.GetChatModel(ctx, &domain.ModelMetadata{
Provider: consts.ModelProviderDeepSeek,
ModelName: "deepseek-chat",
BaseURL: "https://api.deepseek.com",
APIKey: "sk-xxxxxx",
Temperature: &t,
})
msgs := []*schema.Message{ schema.UserMessage("讲个笑话") }
res, _ := chatModel.Generate(ctx, msgs)示例结果
{
"content": "当然,这里有一个轻松的笑话……"
}stream, _ := chatModel.Stream(ctx, msgs)
for {
chunk, err := stream.Recv()
if err == io.EOF {
break
}
if err != nil {
break
}
fmt.Print(chunk.Content)
}示例结果
当 然 , 这 里 有 一 个 轻 松 的 笑 话 …