Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Ekstensi Azure OpenAI untuk Azure Functions saat ini dalam pratinjau.
Pengikatan input Penyematan Azure OpenAI memungkinkan Anda menghasilkan penyematan untuk input. Pengikatan dapat menghasilkan penyematan dari file atau input teks mentah.
Untuk informasi tentang penyiapan dan detail konfigurasi ekstensi Azure OpenAI, lihat Ekstensi Azure OpenAI untuk Azure Functions. Untuk mempelajari selengkapnya tentang penyematan di Azure OpenAI Service, lihat Memahami penyematan di Azure OpenAI Service.
Catatan
Referensi dan contoh hanya disediakan untuk model Node.js v4.
Catatan
Referensi dan contoh hanya disediakan untuk model Python v2.
Catatan
Meskipun kedua model proses C# didukung, hanya contoh model pekerja terisolasi yang disediakan.
Contoh
Contoh ini menunjukkan cara menghasilkan penyematan untuk string teks mentah.
internal class EmbeddingsRequest
{
[JsonPropertyName("rawText")]
public string? RawText { get; set; }
[JsonPropertyName("filePath")]
public string? FilePath { get; set; }
[JsonPropertyName("url")]
public string? Url { get; set; }
}
/// <summary>
/// Example showing how to use the <see cref="EmbeddingsAttribute"/> input binding to generate embeddings
/// for a raw text string.
/// </summary>
[Function(nameof(GenerateEmbeddings_Http_RequestAsync))]
public async Task GenerateEmbeddings_Http_RequestAsync(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings")] HttpRequestData req,
[EmbeddingsInput("{rawText}", InputType.RawText, EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%")] EmbeddingsContext embeddings)
{
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
this.logger.LogInformation(
"Received {count} embedding(s) for input text containing {length} characters.",
embeddings.Count,
requestBody?.RawText?.Length);
// TODO: Store the embeddings into a database or other storage.
}
Contoh ini menunjukkan cara mengambil penyematan yang disimpan pada file tertentu yang dapat diakses oleh fungsi.
[Function(nameof(GetEmbeddings_Http_FilePath))]
public async Task GetEmbeddings_Http_FilePath(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings-from-file")] HttpRequestData req,
[EmbeddingsInput("{filePath}", InputType.FilePath, MaxChunkLength = 512, EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%")] EmbeddingsContext embeddings)
{
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
this.logger.LogInformation(
"Received {count} embedding(s) for input file '{path}'.",
embeddings.Count,
requestBody?.FilePath);
// TODO: Store the embeddings into a database or other storage.
}
Contoh ini menunjukkan cara menghasilkan penyematan untuk string teks mentah.
@FunctionName("GenerateEmbeddingsHttpRequest")
public HttpResponseMessage generateEmbeddingsHttpRequest(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "embeddings")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{RawText}", inputType = InputType.RawText, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") String embeddingsContext,
final ExecutionContext context) {
if (request.getBody() == null)
{
throw new IllegalArgumentException(
"Invalid request body. Make sure that you pass in {\"rawText\": value } as the request body.");
}
JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);
context.getLogger().info(String.format("Received %d embedding(s) for input text containing %s characters.",
embeddingsContextJsonObject.get("count"),
request.getBody().getRawText().length()));
// TODO: Store the embeddings into a database or other storage.
return request.createResponseBuilder(HttpStatus.ACCEPTED)
.header("Content-Type", "application/json")
.build();
}
Contoh ini menunjukkan cara mengambil penyematan yang disimpan pada file tertentu yang dapat diakses oleh fungsi.
@FunctionName("GenerateEmbeddingsHttpFilePath")
public HttpResponseMessage generateEmbeddingsHttpFilePath(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "embeddings-from-file")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{FilePath}", inputType = InputType.FilePath, maxChunkLength = 512, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") String embeddingsContext,
final ExecutionContext context) {
if (request.getBody() == null)
{
throw new IllegalArgumentException(
"Invalid request body. Make sure that you pass in {\"filePath\": value } as the request body.");
}
JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);
context.getLogger().info(String.format("Received %d embedding(s) for input file %s.",
embeddingsContextJsonObject.get("count"),
request.getBody().getFilePath()));
// TODO: Store the embeddings into a database or other storage.
return request.createResponseBuilder(HttpStatus.ACCEPTED)
.header("Content-Type", "application/json")
.build();
}
Contoh ini menunjukkan cara menghasilkan penyematan untuk string teks mentah.
const embeddingsHttpInput = input.generic({
input: '{rawText}',
inputType: 'RawText',
type: 'embeddings',
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('generateEmbeddings', {
methods: ['POST'],
route: 'embeddings',
authLevel: 'function',
extraInputs: [embeddingsHttpInput],
handler: async (request, context) => {
let requestBody = await request.json();
let response = context.extraInputs.get(embeddingsHttpInput);
context.log(
`Received ${response.count} embedding(s) for input text containing ${requestBody.RawText.length} characters.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
interface EmbeddingsHttpRequest {
RawText?: string;
}
const embeddingsHttpInput = input.generic({
input: '{rawText}',
inputType: 'RawText',
type: 'embeddings',
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('generateEmbeddings', {
methods: ['POST'],
route: 'embeddings',
authLevel: 'function',
extraInputs: [embeddingsHttpInput],
handler: async (request, context) => {
let requestBody: EmbeddingsHttpRequest = await request.json();
let response: any = context.extraInputs.get(embeddingsHttpInput);
context.log(
`Received ${response.count} embedding(s) for input text containing ${requestBody.RawText.length} characters.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
Contoh ini menunjukkan cara menghasilkan penyematan untuk string teks mentah.
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
inputType: 'FilePath',
type: 'embeddings',
maxChunkLength: 512,
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('getEmbeddingsFilePath', {
methods: ['POST'],
route: 'embeddings-from-file',
authLevel: 'function',
extraInputs: [embeddingsFilePathInput],
handler: async (request, context) => {
let requestBody = await request.json();
let response = context.extraInputs.get(embeddingsFilePathInput);
context.log(
`Received ${response.count} embedding(s) for input file ${requestBody.FilePath}.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
interface EmbeddingsFilePath {
FilePath?: string;
}
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
inputType: 'FilePath',
type: 'embeddings',
maxChunkLength: 512,
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('getEmbeddingsFilePath', {
methods: ['POST'],
route: 'embeddings-from-file',
authLevel: 'function',
extraInputs: [embeddingsFilePathInput],
handler: async (request, context) => {
let requestBody: EmbeddingsFilePath = await request.json();
let response: any = context.extraInputs.get(embeddingsFilePathInput);
context.log(
`Received ${response.count} embedding(s) for input file ${requestBody.FilePath}.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
Contoh ini menunjukkan cara menghasilkan penyematan untuk string teks mentah.
Berikut adalah file function.json untuk menghasilkan penyematan:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"route": "embeddings",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"name": "Embeddings",
"type": "embeddings",
"direction": "in",
"inputType": "RawText",
"input": "{rawText}",
"embeddingsModel": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
}
]
}
Untuk informasi selengkapnya tentang properti file function.json , lihat bagian Konfigurasi .
using namespace System.Net
param($Request, $TriggerMetadata, $Embeddings)
$input = $Request.Body.RawText
Write-Host "Received $($Embeddings.Count) embedding(s) for input text containing $($input.Length) characters."
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::Accepted
})
Contoh ini menunjukkan cara menghasilkan penyematan untuk string teks mentah.
@app.function_name("GenerateEmbeddingsHttpRequest")
@app.route(route="embeddings", methods=["POST"])
@app.embeddings_input(
arg_name="embeddings",
input="{rawText}",
input_type="rawText",
embeddings_model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
)
def generate_embeddings_http_request(
req: func.HttpRequest, embeddings: str
) -> func.HttpResponse:
user_message = req.get_json()
embeddings_json = json.loads(embeddings)
embeddings_request = {"raw_text": user_message.get("rawText")}
logging.info(
f'Received {embeddings_json.get("count")} embedding(s) for input text '
f'containing {len(embeddings_request.get("raw_text"))} characters.'
)
# TODO: Store the embeddings into a database or other storage.
return func.HttpResponse(status_code=200)
Atribut
EmbeddingsInput Terapkan atribut untuk menentukan pengikatan input penyematan, yang mendukung parameter ini:
| Pengaturan | Deskripsi |
|---|---|
| Masukan | String input yang akan menghasilkan penyematan. |
| AIConnectionName | Opsional. Mendapatkan atau mengatur nama bagian konfigurasi untuk pengaturan konektivitas layanan AI. Untuk Azure OpenAI: Jika ditentukan, cari nilai "Titik Akhir" dan "Kunci" di bagian konfigurasi ini. Jika tidak ditentukan atau bagian tidak ada, kembali ke variabel lingkungan: AZURE_OPENAI_ENDPOINT dan AZURE_OPENAI_KEY. Untuk autentikasi identitas terkelola yang ditetapkan pengguna, properti ini diperlukan. Untuk layanan OpenAI (non-Azure), atur variabel lingkungan OPENAI_API_KEY. |
| EmbeddingsModel |
Opsional. ID model yang akan digunakan, yang default ke text-embedding-ada-002. Anda tidak boleh mengubah model untuk database yang sudah ada. Untuk informasi selengkapnya, lihat Penggunaan. |
| MaxChunkLength | Opsional. Jumlah maksimum karakter yang digunakan untuk memotong input. Untuk informasi selengkapnya, lihat Penggunaan. |
| MaxOverlap | Opsional. Mendapatkan atau mengatur jumlah karakter maksimum untuk tumpang tindih di antara gugus. |
| InputType | Opsional. Mendapatkan jenis input. |
Anotasi
Anotasi EmbeddingsInput memungkinkan Anda menentukan pengikatan input penyematan, yang mendukung parameter ini:
| Elemen | Deskripsi |
|---|---|
| nama | Mendapatkan atau mengatur nama pengikatan input. |
| masukan | String input yang akan menghasilkan penyematan. |
| aiConnectionName | Opsional. Mendapatkan atau mengatur nama bagian konfigurasi untuk pengaturan konektivitas layanan AI. Untuk Azure OpenAI: Jika ditentukan, cari nilai "Titik Akhir" dan "Kunci" di bagian konfigurasi ini. Jika tidak ditentukan atau bagian tidak ada, kembali ke variabel lingkungan: AZURE_OPENAI_ENDPOINT dan AZURE_OPENAI_KEY. Untuk autentikasi identitas terkelola yang ditetapkan pengguna, properti ini diperlukan. Untuk layanan OpenAI (non-Azure), atur variabel lingkungan OPENAI_API_KEY. |
| embeddingsModel |
Opsional. ID model yang akan digunakan, yang default ke text-embedding-ada-002. Anda tidak boleh mengubah model untuk database yang sudah ada. Untuk informasi selengkapnya, lihat Penggunaan. |
| maxChunkLength | Opsional. Jumlah maksimum karakter yang digunakan untuk memotong input. Untuk informasi selengkapnya, lihat Penggunaan. |
| maxOverlap | Opsional. Mendapatkan atau mengatur jumlah karakter maksimum untuk tumpang tindih di antara gugus. |
| inputType | Opsional. Mendapatkan jenis input. |
Dekorator
Selama pratinjau, tentukan pengikatan input sebagai generic_input_binding pengikatan jenis embeddings, yang mendukung parameter ini: embeddings dekorator mendukung parameter ini:
| Pengaturan | Deskripsi |
|---|---|
| arg_name | Nama variabel yang mewakili parameter pengikatan. |
| masukan | String input yang akan menghasilkan penyematan. |
| ai_connection_name | Opsional. Mendapatkan atau mengatur nama bagian konfigurasi untuk pengaturan konektivitas layanan AI. Untuk Azure OpenAI: Jika ditentukan, cari nilai "Titik Akhir" dan "Kunci" di bagian konfigurasi ini. Jika tidak ditentukan atau bagian tidak ada, kembali ke variabel lingkungan: AZURE_OPENAI_ENDPOINT dan AZURE_OPENAI_KEY. Untuk autentikasi identitas terkelola yang ditetapkan pengguna, properti ini diperlukan. Untuk layanan OpenAI (non-Azure), atur variabel lingkungan OPENAI_API_KEY. |
| embeddings_model |
Opsional. ID model yang akan digunakan, yang default ke text-embedding-ada-002. Anda tidak boleh mengubah model untuk database yang sudah ada. Untuk informasi selengkapnya, lihat Penggunaan. |
| maxChunkLength | Opsional. Jumlah maksimum karakter yang digunakan untuk memotong input. Untuk informasi selengkapnya, lihat Penggunaan. |
| max_overlap | Opsional. Mendapatkan atau mengatur jumlah karakter maksimum untuk tumpang tindih di antara gugus. |
| input_type | Mendapatkan jenis input. |
Konfigurasi
Pengikatan mendukung properti konfigurasi ini yang Anda tetapkan dalam file function.json.
| Properti | Deskripsi |
|---|---|
| jenis | Harus berupa EmbeddingsInput . |
| arah | Harus berupa in . |
| nama | Nama pengikatan input. |
| masukan | String input yang akan menghasilkan penyematan. |
| aiConnectionName | Opsional. Mendapatkan atau mengatur nama bagian konfigurasi untuk pengaturan konektivitas layanan AI. Untuk Azure OpenAI: Jika ditentukan, cari nilai "Titik Akhir" dan "Kunci" di bagian konfigurasi ini. Jika tidak ditentukan atau bagian tidak ada, kembali ke variabel lingkungan: AZURE_OPENAI_ENDPOINT dan AZURE_OPENAI_KEY. Untuk autentikasi identitas terkelola yang ditetapkan pengguna, properti ini diperlukan. Untuk layanan OpenAI (non-Azure), atur variabel lingkungan OPENAI_API_KEY. |
| embeddingsModel |
Opsional. ID model yang akan digunakan, yang default ke text-embedding-ada-002. Anda tidak boleh mengubah model untuk database yang sudah ada. Untuk informasi selengkapnya, lihat Penggunaan. |
| maxChunkLength | Opsional. Jumlah maksimum karakter yang digunakan untuk memotong input. Untuk informasi selengkapnya, lihat Penggunaan. |
| maxOverlap | Opsional. Mendapatkan atau mengatur jumlah karakter maksimum untuk tumpang tindih di antara gugus. |
| inputType | Opsional. Mendapatkan jenis input. |
Konfigurasi
Pengikatan mendukung properti ini, yang ditentukan dalam kode Anda:
| Properti | Deskripsi |
|---|---|
| masukan | String input yang akan menghasilkan penyematan. |
| aiConnectionName | Opsional. Mendapatkan atau mengatur nama bagian konfigurasi untuk pengaturan konektivitas layanan AI. Untuk Azure OpenAI: Jika ditentukan, cari nilai "Titik Akhir" dan "Kunci" di bagian konfigurasi ini. Jika tidak ditentukan atau bagian tidak ada, kembali ke variabel lingkungan: AZURE_OPENAI_ENDPOINT dan AZURE_OPENAI_KEY. Untuk autentikasi identitas terkelola yang ditetapkan pengguna, properti ini diperlukan. Untuk layanan OpenAI (non-Azure), atur variabel lingkungan OPENAI_API_KEY. |
| embeddingsModel |
Opsional. ID model yang akan digunakan, yang default ke text-embedding-ada-002. Anda tidak boleh mengubah model untuk database yang sudah ada. Untuk informasi selengkapnya, lihat Penggunaan. |
| maxChunkLength | Opsional. Jumlah maksimum karakter yang digunakan untuk memotong input. Untuk informasi selengkapnya, lihat Penggunaan. |
| maxOverlap | Opsional. Mendapatkan atau mengatur jumlah karakter maksimum untuk tumpang tindih di antara gugus. |
| inputType | Opsional. Mendapatkan jenis input. |
Lihat Bagian contoh untuk contoh lengkapnya.
Penggunaan
Mengubah penyematan model default mengubah cara penyematan disimpan dalam database vektor. Mengubah model default dapat menyebabkan pencarian mulai salah tingkah ketika mereka tidak cocok dengan data lainnya yang sebelumnya diserap ke dalam database vektor. Model default untuk penyematan adalah text-embedding-ada-002.
Saat menghitung panjang karakter maksimum untuk gugus input, pertimbangkan bahwa token input maksimum yang diizinkan untuk model penyematan input generasi kedua seperti text-embedding-ada-002 .8191 Panjang token tunggal adalah sekitar empat karakter (dalam bahasa Inggris), yang diterjemahkan menjadi sekitar 32.000 karakter input (Inggris) yang dapat masuk ke dalam satu gugus.