跳转到主要内容
POST
/
v1
/
files
上传文件
curl --request POST \
  --url https://api.moonshot.cn/v1/files \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \
  --form file='@example-file' \
  --form purpose=file-extract
{
  "id": "<string>",
  "object": "file",
  "bytes": 123,
  "created_at": 123,
  "filename": "<string>",
  "purpose": "file-extract",
  "status": "ok",
  "status_details": "<string>"
}
单个用户最多只能上传 1000 个文件,单文件不超过 100MB,同时所有已上传的文件总和不超过 10G 容量。文件解析服务限时免费,请求高峰期平台可能会有限流策略。
文件接口支持以下格式:.pdf.txt.csv.doc.docx.xls.xlsx.ppt.pptx.md.jpeg.png.bmp.gif.svg.svgz.webp.ico.xbm.dib.pjp.tif.pjpeg.avif.dot.apng.epub.tiff.jfif.html.json.mobi.log.go.h.c.cpp.cxx.cc.cs.java.js.css.jsp.php.py.py3.asp.yaml.yml.ini.conf.ts.tsx 等。
上传文件时选择 purpose="file-extract",随后可以让模型获取文件中的信息作为上下文。
showLineNumbers
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 以及图片等格式
file_object = client.files.create(file=Path("xlnet.pdf"), purpose="file-extract")

# 获取结果
# 注意,之前 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="kimi-k2-turbo-preview",
  messages=messages,
  temperature=0.6,
)

print(completion.choices[0].message)
其中 $MOONSHOT_API_KEY 部分需要替换为您自己的 API Key。或者在调用前给它设置好环境变量。
如果你想一次性上传多个文件,并根据这些文件与 Kimi 对话,你可以参考如下示例:
from typing import *

import os
import json
from pathlib import Path

from openai import OpenAI

client = OpenAI(
    base_url="https://api.moonshot.cn/v1",
    api_key=os.environ["MOONSHOT_DEMO_API_KEY"],
)


def upload_files(files: List[str]) -> List[Dict[str, Any]]:
    """
    upload_files 会将传入的文件(路径)全部通过文件上传接口 '/v1/files' 上传,并获取上传后的
    文件内容生成文件 messages。每个文件会是一个独立的 message,这些 message 的 role 均为
    system,Kimi 大模型会正确识别这些 system messages 中的文件内容。

    :param files: 一个包含要上传文件的路径的列表,路径可以是绝对路径也可以是相对路径,请使用字符串
        的形式传递文件路径。
    :return: 一个包含了文件内容的 messages 列表,请将这些 messages 加入到 Context 中,
        即请求 `/v1/chat/completions` 接口时的 messages 参数中。
    """
    messages = []

    for file in files:
        file_object = client.files.create(file=Path(file), purpose="file-extract")
        file_content = client.files.content(file_id=file_object.id).text
        messages.append({
            "role": "system",
            "content": file_content,
        })

    return messages


def main():
    file_messages = upload_files(files=["upload_files.py"])

    messages = [
        *file_messages,
        {
            "role": "system",
            "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,"
                       "准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不"
                       "可翻译成其他语言。",
        },
        {
            "role": "user",
            "content": "总结一下这些文件的内容。",
        },
    ]

    print(json.dumps(messages, indent=2, ensure_ascii=False))

    completion = client.chat.completions.create(
        model="kimi-k2-turbo-preview",
        messages=messages,
    )

    print(completion.choices[0].message.content)


if __name__ == '__main__':
    main()
上传文件时,选择 purpose="image"purpose="video",上传后的图片或视频可以用于模型的原生理解。请参阅使用视觉模型了解完整示例。

授权

Authorization
string
header
必填

Authorization 请求头需要一个 Bearer 令牌。使用 MOONSHOT_API_KEY 作为令牌。这是一个服务端密钥,请在 API 密钥页面 生成。

请求体

multipart/form-data
file
file
必填

要上传的文件

purpose
enum<string>
必填

指定上传文件的处理方式。file-extract:抽取文件内容;image:上传图片,用于视觉理解;video:上传视频,用于视频理解

可用选项:
file-extract,
image,
video

响应

已上传文件的元数据

id
string
必填

文件唯一标识符

object
string
必填

对象类型

示例:

"file"

bytes
integer
必填

文件大小(字节)

created_at
integer
必填

文件创建时的 Unix 时间戳

filename
string
必填

原始文件名

purpose
enum<string>
必填

上传文件时指定的用途。file-extract:抽取文件内容;image:上传图片,用于视觉理解;video:上传视频,用于视频理解

可用选项:
file-extract,
image,
video
status
string
必填

文件处理状态

示例:

"ok"

status_details
string

处理失败或返回警告时的额外状态详情