Skip to content

northes/go-moonshot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go Moonshot

Go Report Card Go Version tag Go Reference codecov FOSSA Status License

简体中文 | English

A Go SDK for Kimi which created by MoonshotAI.

Warning

This project is still actively developing, and the API may change with the release of the version. Please pay attention when you upgrade the version.

🚀 Installation

go get github.com/northes/go-moonshot@v0.5.2

You can find the docs at go docs.

🤘 Feature

  • Easy to use and simple API, chain operation.
  • Full API and builtin functions support.
  • Predefined enumeration.
  • Messages builder.

📄 Supported API

API Done
Chat Completion
Chat Completion(stream)
List Models
List Files
Upload File
Delete File
Get File Info
Get File Contents
Estimate Token Count
User Balance
Tool Use
Context Cache

🗜 Builtin Functions

  • $web_search

🥪 Usage

For more examples, you can view the test file of the corresponding interface.

Initialize client

  1. Get a MoonshotAI API Key: https://platform.moonshot.cn.
  2. Set up key using a configuration file or environment variable.

Tip

Your API key is sensitive information. Do not share it with anyone.

With Only Key

key, ok := os.LookupEnv("MOONSHOT_KEY")
// do something...

cli, err := moonshot.NewClient(key)
// do something...

With Config

key, ok := os.LookupEnv("MOONSHOT_KEY")
// do something...

cli, err := moonshot.NewClientWithConfig(
    moonshot.NewConfig(
        moonshot.WithAPIKey(key),
    ),
)

API

List Models

resp, err := cli.Models().List(context.Background())
// do something...

Chat Completions

// Use builder to build a request more conveniently
builder := moonshot.NewChatCompletionsBuilder()
builder.AppendPrompt("你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。").
	AppendUser("你好,我叫李雷,1+1等于多少?").
	WithTemperature(0.3)

resp, err := cli.Chat().Completions(ctx, builder.ToRequest()) 
// {"id":"cmpl-eb8e8474fbae4e42bea9f6bbf38d56ed","object":"chat.completion","created":2647921,"model":"moonshot-v1-8k","choices":[{"index":0,"message":{"role":"assistant","content":"你好,李雷!1+1等于2。这是一个基本的数学加法运算。如果你有任何其他问题或需要帮助,请随时告诉我。"},"finish_reason":"stop"}],"usage":{"prompt_tokens":87,"completion_tokens":31,"total_tokens":118}}

// do something...

// append context
for _, choice := range resp.Choices {
    builder.AppendMessage(choice.Message)
}

builder.AppendUser("在这个基础上再加3等于多少")

resp, err := cli.Chat().Completions(ctx, builder.ToRequest())
// {"id":"cmpl-a7b938eaddc04fbf85fe578a980040ac","object":"chat.completion","created":5455796,"model":"moonshot-v1-8k","choices":[{"index":0,"message":{"role":"assistant","content":"在这个基础上,即1+1=2的结果上再加3,等于5。所以,2+3=5。"},"finish_reason":"stop"}],"usage":{"prompt_tokens":131,"completion_tokens":26,"total_tokens":157}}

// do something...

Chat completions with stream

// use struct
resp, err := cli.Chat().CompletionsStream(context.Background(), &moonshot.ChatCompletionsRequest{
    Model: moonshot.ModelMoonshotV18K,
    Messages: []*moonshot.ChatCompletionsMessage{
        {
            Role:    moonshot.RoleUser,
            Content: "你好,我叫李雷,1+1等于多少?",
        },
    },
    Temperature: 0.3,
    Stream:      true,
})
// do something...

for receive := range resp.Receive() {
    msg, err := receive.GetMessage()
    if err != nil {
        if errors.Is(err, io.EOF) {
            break
        }
        break
    }
    switch msg.Role {
        case moonshot.RoleSystem,moonshot.RoleUser,moonshot.RoleAssistant:
        // do something...
        default:
        // do something...
    }
}

Web search tool

builder := moonshot.NewChatCompletionsBuilder()
builder.SetModel(moonshot.ModelMoonshotV1128K)
builder.AddUserContent("请搜索 Moonshot AI Context Caching 技术,并告诉我它是什么。")
builder.SetTool(&moonshot.ChatCompletionsTool{
	Type: moonshot.ChatCompletionsToolTypeBuiltinFunction,
	Function: &moonshot.ChatCompletionsToolFunction{
		Name: moonshot.BuiltinFunctionWebSearch,
	},
})

resp, err := cli.Chat().Completions(ctx, builder.ToRequest())
// do something...

if len(resp.Choices) != 0 {
	choice := resp.Choices[0]
	if choice.FinishReason == moonshot.FinishReasonToolCalls {
		for _, tool := range choice.Message.ToolCalls {
			if tool.Function.Name == moonshot.BuiltinFunctionWebSearch {
				// web search
				arguments := new(moonshot.ChatCompletionsToolBuiltinFunctionWebSearchArguments)
				if err = json.Unmarshal([]byte(tool.Function.Arguments), arguments); err != nil {
					continue
				}
				// do something...

				builder.AddMessageFromChoices(resp.Choices)
				builder.AddToolContent(tool.Function.Arguments, tool.Function.Name, tool.ID)
			}
		}
	}
}

resp, err = cli.Chat().Completions(ctx, builder.ToRequest())
// do something...

🤝 Missing a Feature?

Feel free to open a new issue, or contact me.

🥳 Contributors

contributors

Made with contrib.rocks.

📘 License

This is open-sourced library licensed under the MIT license.

FOSSA Status