月之暗面:Moonshot AI接口总结

前言:

开发者们只需访问 platform.moonshot.cn,便能创建自己的 API Key,进而将 Kimi 智能助手背后的同款 moonshot 模型能力,如长文本处理和出色的指令遵循等,集成至自己的产品中。这不仅增强了现有产品的功能,更为开发者们提供了打造全新、富有创意的产品的机会。

除了核心的对话问答功能外,Moonshot AI 开放平台还提供了“文件内容提取”能力接口。这一功能使得开发者们能够结合文件上传功能,开发出针对文档和知识库场景的多样化应用。

在定价方面,Moonshot AI 开放平台提供了三个基础模型:moonshot-v1-8k、32k 和128k。这些模型的定价分别为每千个 token0.012元、0.024元和0.06元。为了让开发者们能够更好地体验平台的功能,注册后的开发者将获得价值15元的体验包,这相当于125万 tokens(8k模型)或62.5万 tokens(32k模型)的使用量。同时,个人自助充值功能也即将上线,为开发者们提供更多的便利和选择。

获取API Key:

1、打开网址:platform.moonshot.cn 注册账号登录

2、用户中心查看余额

3、获取API Key

Python 安装及调用方法:

1、命令安装

pip install openai # 如果你没有安装,可以这样安装一下依赖

 如果您之前安装过,请再更新一下 openai 确保它版本高于 1.0.

pip install --upgrade openai

 示例:

import os
from openai import OpenAI

client = OpenAI(
    api_key="MOONSHOT_API_KEY",
    base_url="https://api.moonshot.cn/v1",
)

completion = client.chat.completions.create(
  model="moonshot-v1-8k",
  messages=[ 
    {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一些涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
    {"role": "user", "content": "你好,我叫李雷,1+1等于多少?"}
  ],
  temperature=0.3,
)

print(completion.choices[0].message)

API 说明

请求地址

POST https://api.moonshot.cn/v1/chat/completions

请求内容

示例

{
    "model": "moonshot-v1-8k",
    "messages": [
        {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一些涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
        {"role": "user", "content": "你好,我叫李雷,1+1等于多少?"}
    ],
     "temperature": 0.3
}

字段说明

字段说明类型取值
messages包含迄今为止对话的消息列表。List[Dict]这是一个结构体的列表,每个元素类似如下:json{ "role": "user", "content": "你好"} role 只支持 system,user,assistant 其一,content 不得为空
modelModel ID, 可以通过 List Models 获取string目前是 moonshot-v1-8k,moonshot-v1-32k,moonshot-v1-128k 其一
max_tokens聊天完成时生成的最大 token 数。如果到生成了最大 token 数个结果仍然没有结束,finish reason 会是 "length", 否则会是 "stop"int这个值建议按需给个合理的值,如果不给的话,我们会给一个不错的整数比如 1024。特别要注意的是,这个 max_tokens 是指您期待我们返回的 token 长度,而不是输入 + 输出的总长度。比如对一个 moonshot-v1-8k 模型,它的最大输入 + 输出总长度是 8192,当输入 messages 总长度为 4096 的时候,您最多只能设置为 4096,否则我们服务会返回不合法的输入参数( invalid_request_error ),并拒绝回答。如果您希望获得“输入的精确 token 数”,可以使用下面的“计算 Token” API 使用我们的计算器获得计数。
temperature使用什么采样温度,介于 0 和 1 之间。较高的值(如 0.7)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定性。float如果设置,值域须为 [0, 1] 我们推荐 0.3,以达到较合适的效果。
top_p另一种采样温度float默认 1.0
n为每条输入消息生成多少个结果int默认 1,不得大于 5 特别的,当 temperature 非常小靠近 0 的时候,我们只能返回 1 个结果,如果这个时候 n 设置并 > 1,我们服务会返回不合法的输入参数( invalid_request_error )。
stream是否流式返回bool默认 false, 可选 true

返回内容

对非 stream 格式的,返回类似如下:

{
  "id": "cmpl-04ea926191a14749b7f2c7a48a68abc6",
  "object": "chat.completion",
  "created": 1698999496,
  "model": "moonshot-v1-8k",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": " 你好,李雷!1+1等于2。如果你有其他问题,请随时提问!"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 19,
    "completion_tokens": 21,
    "total_tokens": 40
  }
}

对 stream 格式的,返回类似如下:

data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]}

...

data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{"content":"。"},"finish_reason":null}]}

data: {"id":"cmpl-1305b94c570f447fbde3180560736287","object":"chat.completion.chunk","created":1698999575,"model":"moonshot-v1-8k","choices":[{"index":0,"delta":{},"finish_reason":"stop","usage":{"prompt_tokens":19,"completion_tokens":13,"total_tokens":32}}]}

data: [DONE]

调用示例

Python 流式调用

对简单调用,见前面。对流式调用,可以参考如下代码片段:

import os
from openai import OpenAI

client = OpenAI(
    api_key="MOONSHOT_API_KEY",
    base_url="https://api.moonshot.cn/v1",
)

response = client.chat.completions.create(
    model="moonshot-v1-8k",
    messages=[
        {
            "role": "system",
            "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一些涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。",
        },
        {"role": "user", "content": "你好,我叫李雷,1+1等于多少?"},
    ],
    temperature=0.3,
    stream=True,
)

collected_messages = []
for idx, chunk in enumerate(response):
    # print("Chunk received, value: ", chunk)
    chunk_message = chunk.choices[0].delta
    if not chunk_message.content:
        continue
    collected_messages.append(chunk_message)  # save the message
    print(f"#{idx}: {''.join([m.content for m in collected_messages])}")
print(f"Full conversation received: {''.join([m.content for m in collected_messages])}")

List Models

请求地址

GET https://api.moonshot.cn/v1/models

调用示例

import os
from openai import OpenAI

client = OpenAI(
    api_key="MOONSHOT_API_KEY",
    base_url="https://api.moonshot.cn/v1",
)

model_list = client.models.list()
model_data = model_list.data

for i, model in enumerate(model_data):
    print(f"model[{i}]:", model.id)

文件内容抽取

该功能可以实现让模型获取文件中的信息作为上下文。本功能需要配合文件上传等功能共同使用。

调用示例

from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key="MOONSHOT_API_KEY",
    base_url="https://api.moonshot.cn/v1",
)

# xlnet.pdf 是一个示例文件, 我们支持 pdf, doc 等格式, 目前暂不提供ocr相关能力
file_object = client.files.create(file=Path("xlnet.pdf"), purpose="file-extract")

# 获取结果
# file_content = client.files.retrieve_content(file_id=file_object.id)
# 注意,之前 retrieve_content api 在最新版本标记了 warning, 可以用下面这行代替
# 如果是旧版本,可以用 retrieve_content
file_content = client.files.content(file_id=file_object.id).text

# 把它放进请求中
messages=[
    {
        "role": "system",
        "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一些涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。",
    },
    {
        "role": "system",
        "content": file_content,
    },
    {"role": "user", "content": "请简单介绍 xlnet.pdf 讲了啥"},
]

# 然后调用 chat-completion, 获取 kimi 的回答
completion = client.chat.completions.create(
  model="moonshot-v1-32k",
  messages=messages,
  temperature=0.3,
)

print(completion.choices[0].message)

列出文件

本功能用于列举出用户已上传的所有文件

请求地址
GET https://api.moonshot.cn/v1/files
调用示例
file_list = client.files.list()

for file in file_list.data:
    print(file) # 查看每个文件的信息

上传文件

注意,单个用户最多只能上传 1000 个文件,单文件不超过100MB,同时所有已上传的文件总和不超过 10G 容量。如果您要抽取更多文件,需要先删除一部分不再需要的文件。

请求地址
POST https://api.moonshot.cn/v1/files

文件上传成功后,我们会开始抽取文件信息

调用示例
# file 可以是多种类型
# purpose 目前只支持 "file-extract"
file_object = client.files.create(file=Path("xlnet.pdf"), purpose="file-extract")

删除文件

本功能可以用于删除不再需要使用的文件

请求地址
DELETE https://api.moonshot.cn/v1/files/{file_id}
调用示例
client.files.delete(file_id=file_id)

获取文件信息

本功能用于获取指定文件的文件基础信息

请求地址
GET https://api.moonshot.cn/v1/files/{file_id}
调用示例
client.files.retrieve(file_id=file_id)
# FileObject(
# id='clg681objj8g9m7n4je0', 
# bytes=761790, 
# created_at=1700815879,
# filename='xlnet.pdf',
# object='file',
# purpose='file-extract',
# status='ok', status_details='') # status 如果为 error 则抽取失败

获取文件内容

本功能支持获取指定文件的文件抽取结果。通常的,它是一个合法的 JSON 格式的 string,并且对齐了我们的推荐格式。 如需抽取多个文件,您可以在某个 message 中用换行符 \n 隔开,拼接为一个大字符串,role 为 system 的方式加入历史记录。

请求地址
GET https://api.moonshot.cn/v1/files/{file_id}/content
调用示例

 

# file_content = client.files.retrieve_content(file_id=file_object.id)
# type of file_content is `str`
# 注意,之前 retrieve_content api 在最新版本标记了 warning, 可以用下面这行代替
# 如果是旧版本,可以用 retrieve_content
file_content = client.files.content(file_id=file_object.id).text
# 我们的输出结果目前是一个内部约定好格式的 json, 但是在 message 中应该以 text 格式放进去

计算 Token

请求地址

POST https://api.moonshot.cn/v1/tokenizers/estimate-token-count

请求内容

estimate-token-count 的输入结构体和 chat completion 基本一致。

示例

{
    "model": "moonshot-v1-8k",
    "messages": [
        {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一些涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
        {"role": "user", "content": "你好,我叫李雷,1+1等于多少?"}
    ]
}

字段说明

字段说明类型取值
messages包含迄今为止对话的消息列表。List[Dict]这是一个结构体的列表,每个元素类似如下:json{ "role": "user", "content": "你好"} role 只支持 system,user,assistant 其一,content 不得为空
modelModel ID, 可以通过 List Models 获取string目前是 moonshot-v1-8k,moonshot-v1-32k,moonshot-v1-128k 其一

调用示例

curl 'https://api.moonshot.cn/v1/tokenizers/estimate-token-count' \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $MOONSHOT_API_KEY" \
  -d '{
    "model": "moonshot-v1-8k",
    "messages": [
        {
            "role": "system",
            "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一些涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"
        },
        {
            "role": "user",
            "content": "你好,我叫李雷,1+1等于多少?"
        }
    ]
}'

返回内容

{
    "data": {
        "total_tokens": 80
    },
}

当没有 error 字段,可以取 data.total_tokens 作为计算结果

错误说明

下面是主要的几个错误

Error TypeHTTP Status Code详细描述
invalid_authentication_error401鉴权失败请确认
invalid_request_error400这个通常意味着您输入格式有误,包括使用了预期外的参数,比如过大的 temperature,或者 messages 的大小超过了限制。在 message 字段通常会有更多解释
rate_limit_reached_error429您超速了。我们设置了最大并发上限和分钟为单位的次数限制。如果在 429 后立即重试,可能会遇到罚时建议控制并发大小,并且在 429 后 sleep 3 秒
exceeded_current_quota_error429Quota 不够了,请联系管理员加量

价格说明

按照实际使用的数据量( 千tokens )收费。Token 在这里指的是文本中的一个最小单位,可以是一个词、一个数字或一个标点符号等。

模型计费单位价格
moonshot-v1-8k1000 tokens0.012元
moonshot-v1-32k1000 tokens0.024元
moonshot-v1-128k1000 tokens0.06元

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/404266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【原创教程】汇川H5U入门教案

一、新建H5U工程 1. 双击AutoShop软件桌面快捷方式,打开AutoShop软件。 2. 在菜单栏选择“文件 > 新建工程”或在工具栏单击 ,再打开的对话框中选择编辑器类型,再选择H5U作为PLC类型。 3. 输入工程名并选择保存路径,然后单击“确定”创建新工程,随即进入工程主界面…

【安卓基础5】中级控件

🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职 🏆本文收录于 安卓学习大全持续更新中,欢迎关注 🏆安卓学习资料推荐: 视频:b站搜动脑学院 视频…

汽车常识网:电脑主机如何算功率的计算方法?

今天汽车知识网就给大家讲解一下如何计算一台主机的功率。 它还会解释如何计算计算机主机所需的功率? ? (如何计算电脑主机所需的功率)进行说明。 如果它恰好解决了您现在面临的问题,请不要忘记关注本站。 让我们现在就…

PyQt5图片浏览器

PyQt5图片浏览器 实现方式功能实现具体代码 界面实现pillow源码修改ImageQt错误主页面布局 项目开源地址 分享一个图片浏览器 实现方式 qt本身有一个QGraphicsView类用来当做视图框架。 具体参考:如何在pyqt中使用 QGraphicsView 实现图片查看器 不过大佬给的例子…

哪个蓝牙耳机好用?2024最新蓝牙耳机选购指南,实测避坑!

​蓝牙耳机已成为现代生活中不可或缺的一部分。无论你是追求高品质音质、注重佩戴体验,还是在意性价比,市场上总有适合你的那一款。希望通过我的推荐和分析,你能找到一款真正适合自己的蓝牙耳机,让你的音乐之旅更加精彩。 一、选购…

防御保护第八、九、十、十一天笔记

一、内容安全 1、DFI和DPI技术 --- 深度检测技术 DPI是一种基于应用层的流量检测和控制技术,它会对流量进行拆包,分析包头和应用层的内容,从而识别应用程序和应用程序的内容。这种技术增加了对应用层的分析,识别各种应用&#xf…

如何用IP地址找到实际位置?

在互联网世界中,每个设备都有一个独特的标识,那就是IP地址。它不仅是设备在网络中的“身份证”,还承载着设备在网络中的位置信息。那么,我们是否可以通过IP地址来找到设备的实际位置呢?本文将深入探讨这一问题。 一、I…

构建React TodoList应用:管理你的任务清单

构建React TodoList应用:管理你的任务清单 在日常生活和工作中,任务管理是一项至关重要的任务。为了更好地组织和管理我们的工作和生活,我们需要一个高效而简单的任务管理工具。本文将介绍如何使用React框架构建一个功能丰富的TodoList应用&…

华为算法题 go语言或者ptython

1 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返…

抖店还好做吗?新手想抓住2024年抖店的机会,需要做到这几点

我是王路飞。 关于抖店还好做吗?还适合入局吗?类似的问题,这几年每天都有,尤其是在开年后的这段时间。 本身这个时间内就是找项目的黄金时期,再加上抖店的流量和红利都太诱人了。 但很多人不了解电商,不…

洛谷 P1038 [NOIP2003 提高组] 神经网络【拓扑序处理】

原题链接:https://www.luogu.com.cn/problem/P1038 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一…

SAP PP学习笔记03 - SAP中如何设定项目选择

上次这篇文章里面讲了界面的字段显示顺序及是否显示的设置。 并做了 事务代码 控制界面显示的例子。 SAP PP学习笔记02 - PP中配置品目Master时的顺序-CSDN博客 那么,每次控制界面显示什么都要这么挨个 这么设置一遍吗? 那岂不得烦死。 其实SAP里面参…

Python实现歌曲下载程序, 打包exe应用程序

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 模块使用: import requests >>> pip install requests import parsel >>> pip install parsel import pr…

Stable Diffusion 模型分享:Dark Sushi Mix 大颗寿司Mix

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

Rust: reqwest库示例

一、异步处理单任务 1、cargo.toml [dependencies] tokio { version "1.0.0", features ["full", "tracing"] } tokio-util { version "0.7.0", features ["full"] } tokio-stream { version "0.1" }…

前端工程Bem架构及其封装

文章目录 简介语法在vue3项目中引用sass创建bem.scss文件修改vite.config.tsvue文件中使用结果 这是我学习记录的笔记,如有不正,欢迎补充 简介 首先认识一下什么是bem架构?BEM的意思就是块(block)、元素(e…

操作系统--调度算法

一、进程调度算法(CPU调度算法) 什么时候会发生 CPU 调度呢?通常有以下四种情况: 「抢占式调度」:进程正在运行的时,可以被打断,使其把 CPU 让给其他进程。那抢占的原则一般有三种&#xff0c…

【网络编程】okhttp深入理解

newCall 实际上是创建了一个 RealCall 有三个参数:OkHttpClient(通用配置,超时时间等) Request(Http请求所用到的条件,url等) 布尔变量forWebSocket(webSocket是一种应用层的交互方式,可双向交互…

符尧大佬一作发文,仅改训练数据,就让LLaMa-2上下文长度扩展20倍!

引言:探索语言模型的长上下文能力 近日,谷歌推出了Gemini Pro 1.5,将上下文窗口长度扩展到100万个tokens,目前领先世界。而其他语言模型也正在不断探索长上下文能力,也就是模型处理和理解超出其训练时所见上下文长度的…

基于飞凌嵌入式RK3568核心板的边缘计算门禁屏解决方案

边缘计算作为一种将计算任务从云端推向网络边缘的新型计算模式,正日益受到各行各业的青睐,并已在我们的生产和生活当中得到了广泛的应用,其中“门禁系统”就是最常见的与边缘计算相结合的应用之一。 传统的门禁系统受限于数据处理能力和网络…