Konteks keterampilan dan bahasa anotasi input

Nota

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Artikel ini adalah dokumentasi referensi untuk konteks keterampilan dan sintaks input. Ini adalah deskripsi lengkap tentang bahasa ekspresi yang digunakan untuk membuat jalur ke simpul dalam dokumen yang diperkaya.

Keterampilan Pencarian Azure AI dapat menggunakan dan memperkaya data yang berasal dari sumber data dan dari output keterampilan lain. Himpunan kerja data yang mewakili status pekerjaan pengindeks saat ini untuk dokumen saat ini dimulai dari data mentah yang berasal dari sumber data dan secara progresif diperkaya dengan setiap data output perulangan keterampilan. Data tersebut diatur secara internal dalam struktur seperti pohon yang dapat dikueri untuk digunakan sebagai input keterampilan atau ditambahkan ke indeks. Simpul di pohon bisa menjadi nilai sederhana seperti string dan angka, array, atau objek kompleks dan bahkan file biner. Bahkan nilai sederhana dapat diperkaya dengan informasi yang lebih terstruktur. Misalnya, string dapat diannotasi dengan informasi tambahan yang disimpan di bawahnya di pohon pengayaan. Ekspresi yang digunakan untuk mengkueri struktur internal tersebut menggunakan sintaks kaya yang dirinci dalam artikel ini. Struktur data yang diperkaya dapat diperiksa dari sesi debug. Ekspresi yang mengkueri struktur juga dapat diuji dari sesi debug.

Sepanjang artikel, kami menggunakan data yang diperkaya berikut sebagai contoh. Data ini khas dari jenis struktur yang akan Anda dapatkan saat memperkaya dokumen menggunakan set keterampilan dengan OCR, ekstraksi frasa kunci, terjemahan teks, deteksi bahasa, dan keterampilan pengenalan entitas , ditambah keterampilan tokenizer kustom.

Jalur Value
document
 merged_content "Studi BMN 110 pada Pasien Anak"...
  keyphrases
   [0] "Studi BMN"
   [1] "Syndrome"
   [2] "Pasien Anak"
   ...
  locations
   [0] "IVA"
  translated_text "Étude de BMN 110 chez les pasien pédiatriques"...
  entities
   [0]
    category "Organization"
    subcategory null
    confidenceScore 0.72
    length 3
    offset 9
    text "BMN"
   ...
  organizations
   [0] "BMN"
  language "en"
 normalized_images
  [0]
   layoutText ...
   text
    words
     [0] "Study"
     [1] "of"
     [2] "BMN"
     [3] "110"
     ...
  [1]
   layoutText ...
   text
    words
     [0] "it"
     [1] "is"
     [2] "certainly"
     ...
    ...
  ...

Akar dokumen

Data berada di bawah satu elemen akar dan jalurnya adalah "/document". Elemen akar adalah konteks default untuk keterampilan.

Jalur sederhana

Jalur sederhana melalui dokumen yang diperkaya internal dapat diekspresikan dengan token sederhana yang dipisahkan oleh garis miring. Sintaks ini mirip dengan spesifikasi JSON Pointer.

Properti objek

Properti simpul yang mewakili objek menambahkan nilainya ke pohon di bawah nama properti. Nilai-nilai tersebut dapat diperoleh dengan menambahkan nama properti sebagai token yang dipisahkan oleh garis miring:

Expression Value
/document/merged_content/language "en"

Token nama properti peka huruf besar/kecil.

Indeks item array

Elemen tertentu dari array dapat dirujuk dengan menggunakan indeks numeriknya seperti nama properti:

Expression Value
/document/merged_content/keyphrases/1 "Syndrome"
/document/merged_content/entities/0/text "BMN"

Urutan escape

Ada beberapa karakter yang memiliki arti khusus dan perlu diloloskan jika ditafsirkan as-is alih-alih elemen sintaksis. Karakter-karakter ini termasuk #, /, dan ~ antara lain.

Urutan escape Arti khusus (penggunaan dalam sintaks jalur) Contoh
~0 Digunakan untuk melarikan diri ~ "~0" untuk ~, di mana "~/documents" menjadi "~0~1documents"
~1 Digunakan untuk melarikan diri / "~1" untuk /, di mana "~/documents" menjadi "~0~1documents"
~2 Digunakan untuk secara generik untuk menghindari urutan arbitrer (termasuk tetapi tidak terbatas # pada dan *) "~2#~2" di mana "readme#requirements" menjadi "readme~2#~2requirements"

Enumerasi array

Array nilai dapat diperoleh menggunakan '*' token:

Expression Value
/document/normalized_images/0/text/words/* ["Study", "of", "BMN", "110" ...]

Token '*' tidak harus berada di akhir jalur. Dimungkinkan untuk menghitung semua simpul yang cocok dengan jalur dengan bintang di tengah atau dengan beberapa bintang:

Expression Value
/document/normalized_images/*/text/words/* ["Study", "of", "BMN", "110" ... "it", "is", "certainly" ...]

Contoh ini mengembalikan daftar datar semua simpul yang cocok.

Dimungkinkan untuk mempertahankan lebih banyak struktur dan mendapatkan array terpisah untuk kata-kata setiap halaman dengan menggunakan '#' token alih-alih token kedua '*' :

Expression Value
/document/normalized_images/*/text/words/# [["Study", "of", "BMN", "110" ...], ["it", "is", "certainly" ...] ...]

Token '#' mengekspresikan bahwa array harus diperlakukan sebagai nilai tunggal alih-alih dijumlahkan.

Menghitung array dalam konteks

Seringkali berguna untuk memproses setiap elemen array dalam isolasi dan memiliki serangkaian input dan output keterampilan yang berbeda untuk masing-masing elemen. Praktik terbaik ini dapat dilakukan dengan mengatur konteks keterampilan ke enumerasi alih-alih default "/document".

Dalam contoh berikut, kami menggunakan salah satu ekspresi input yang kami gunakan sebelumnya, tetapi dengan konteks berbeda yang mengubah nilai yang dihasilkan.

Context Expression Values
/document/normalized_images/* /document/normalized_images/*/text/words/* ["Study", "of", "BMN", "110" ...]
["it", "is", "certainly" ...]
...

Untuk kombinasi konteks dan input ini, keterampilan dijalankan sekali untuk setiap gambar yang dinormalisasi: sekali untuk "/document/normalized_images/0" dan sekali untuk "/document/normalized_images/1". Dua nilai input yang sesuai dengan setiap eksekusi keterampilan dirinci dalam kolom nilai.

Saat Anda mengurai array dalam konteks, output apa pun yang dihasilkan kemampuan ditambahkan ke dokumen sebagai pengayaan konteks. Dalam contoh sebelumnya, output bernama "out" memiliki nilainya untuk setiap eksekusi yang ditambahkan ke dokumen masing-masing di bawah "/document/normalized_images/0/out" dan "/document/normalized_images/1/out".

Nilai harfiah

Input keterampilan dapat mengambil nilai harfiah sebagai inputnya alih-alih nilai dinamis yang dikueri dari dokumen yang ada. Praktik terbaik ini dapat dicapai dengan awalan nilai dengan tanda sama dengan. Nilai dapat berupa angka, string, atau Boolean. Nilai string dapat diapit dalam tanda kutip tunggal ' atau ganda " .

Expression Value
=42 42
=2.45E-4 0.000245
="some string" "some string"
='some other string' "some other string"
="unicod\u0065" "unicode"
=false false

Dalam array baris

Jika input keterampilan tertentu memerlukan array data, tetapi data direpresentasikan sebagai nilai tunggal saat ini atau Anda perlu menggabungkan beberapa nilai tunggal yang berbeda ke dalam bidang array, maka Anda dapat membuat nilai array sebaris sebagai bagian dari ekspresi input keterampilan dengan membungkus daftar ekspresi yang dipisahkan koma dalam tanda kurung ([ dan ]). Nilai array dapat berupa kombinasi jalur ekspresi atau nilai harfiah sesuai kebutuhan. Anda juga dapat membuat array berlapis dalam array dengan cara ini.

Expression Value
=['item'] ["item"]
=[$(/document/merged_content/entities/0/text), 'item'] ["BMN", "item"]
=[1, 3, 5] [1, 3, 5]
=[true, true, false] [benar, benar, salah]
=[[$(/document/merged_content/entities/0/text), 'item'],['item2', $(/document/merged_content/keyphrases/1)]] [["BMN", "item"], ["item2", "Sindrom"]]

Jika keterampilan memiliki konteks yang menjelaskan untuk menjalankan keterampilan per input array (artinya, bagaimana "context": "/document/pages/*" keterampilan berjalan sekali per "halaman" di pages) lalu meneruskan nilai tersebut sebagai ekspresi sebagai input ke array baris menggunakan salah satu nilai tersebut sekaligus.

Misalnya dengan data sampel kami yang diperkaya, jika keterampilan context Anda adalah /document/merged_content/keyphrases/* dan kemudian Anda membuat array sebaris dari berikut =['key phrase', $(/document/merged_content/keyphrases/*)] pada input keterampilan itu, maka keterampilan dijalankan tiga kali, sekali dengan nilai ["frasa kunci", "Studi BMN"], yang lain dengan nilai ["frasa kunci", "Sindrom"], dan akhirnya dengan nilai ["frasa kunci", "Pasien Anak"]. Nilai "frasa kunci" harfiah tetap sama setiap kali, tetapi nilai jalur ekspresi berubah dengan setiap eksekusi keterampilan.

Ekspresi komposit

Dimungkinkan untuk menggabungkan nilai bersama-sama menggunakan operator unary, biner, dan ternary. Operator dapat menggabungkan nilai dan nilai harfiah yang dihasilkan dari evaluasi jalur. Saat digunakan di dalam ekspresi, jalur harus diapit antara "$(" dan ")".

Boolean tidak '!'

Expression Value
=!false true

Negatif '-'

Expression Value
=-42 -42
=-$(/document/merged_content/entities/0/offset) -9

Penambahan '+'

Expression Value
=2+2 4
=2+$(/document/merged_content/entities/0/offset) 11

Pengurangan '-'

Expression Value
=2-1 1
=$(/document/merged_content/entities/0/offset)-2 7

Perkalian '*'

Expression Value
=2*3 6
=$(/document/merged_content/entities/0/offset)*2 18

Divisi '/'

Expression Value
=3/2 1.5
=$(/document/merged_content/entities/0/offset)/3 3

Modulo '%'

Expression Value
=15%4 3
=$(/document/merged_content/entities/0/offset)%2 1

Perangkaian string '+'

Expression Value
="Hello," + "world!" "Hello, world!"
=$(/document/merged_content/entities/0/text) + $(/document/merged_content/entities/0/category) "BMN Organization"

Kurang dari, kurang dari atau sama dengan, lebih besar dari dan lebih besar dari atau sama dengan '<''<=''>''>='

Expression Value
=15<4 false
=4<=4 true
=15>4 true
=1>=2 false

Kesetaraan dan ketidaksetaraan '==''!='

Expression Value
=15==4 false
=4==4 true
=15!=4 true
=1!=1 false

Operasi logis dan, atau dan eksklusif atau '&&''||''^'

Expression Value
=true&&true true
=true&&false false
=true||true true
=true||false true
=false||false false
=true^false true
=true^true false

Operator ternary '?:'

Dimungkinkan untuk memberikan input nilai yang berbeda berdasarkan evaluasi ekspresi Boolean menggunakan operator ternary.

Expression Value
=true?"true":"false" "true"
=$(/document/merged_content/entities/0/offset)==9?"nine":"not nine" "nine"

Tanda kurung dan prioritas operator

Operator dievaluasi dengan prioritas yang sesuai dengan konvensi biasa: operator unary, kemudian perkalian, pembagian dan modulo, kemudian penambahan dan pengurangan, kemudian perbandingan, kemudian kesetaraan, dan kemudian operator logis. Aturan asokiativitas biasa juga berlaku.

Tanda kurung dapat digunakan untuk mengubah atau membedakan urutan evaluasi.

Expression Value
=3*2+5 11
=3*(2+5) 21

Baca juga