Adaptor untuk menghubungkan AI LLM dengan sumber dan data grounding real-time
Mencantumkan peningkatan besar
Melepaskan | Tanggal | Fitur Utama |
---|---|---|
2.0.5 | 01 April 2024 | Pembaruan besar: Mendukung ClaudeAI selain OpenAI dan GoogleAI. |
2.0.0 | 05 Januari 2024 | Pembaruan besar: Mendukung GoogleAI selain OpenAI. |
1.3.0 | 16 Desember 2023 | Peningkatan permintaan untuk memanfaatkan data yang relevan dan menghasilkan respons yang relevan. Respons untuk semua metode sekarang memberikan informasi runtime. |
1.2.9 | 03 November 2023 | (1) Konfigurasi agen dapat menentukan kunci bahasa (opsional). Jika ini diatur, LLM selalu berpikir dan merespons dalam bahasa tertentu (terlepas dari bahasa masukan). Catatan : Kualitas terjemahan mungkin tidak optimal dalam beberapa kasus, jadi pengujian menyeluruh sangat disarankan. (2) Respon dari metode all-in-one mencakup data dasar yang digunakan oleh LLM untuk menghasilkan respons. Hal ini akan meningkatkan keandalan. |
1.2.8 | 26 Oktober 2023 | Menggabungkan teknik dorongan mendalam untuk meningkatkan kualitas respons. |
1.2.2 | 18 Oktober 2023 | Peningkatan perintah dan logika LLM untuk penentuan API. |
1.1.1 | 09 Oktober 2023 | Perintah LLM yang diperkenalkan untuk menggabungkan cita rasa AI konstitusional untuk memastikan masukan pengguna adil, bertanggung jawab, penuh hormat, dan manusiawi. |
1.1.0 | 08 Oktober 2023 | Memperkenalkan kemampuan untuk membangun konteks/memori untuk pertanyaan lanjutan. |
1.0.0 | 08 Oktober 2023 | Peluncuran awal. |
Sebagai model kecerdasan buatan multi-modal, LLM memiliki penerapan luas untuk menghasilkan konten dengan instruksi minimal. Teknik dorongan seperti zero-shot atau some-shot sangat populer di kalangan pengguna sehari-hari aplikasi obrolan yang dibangun di atas LLM tersebut. Meski begitu, meskipun kualitas responsnya sangat bagus, seberapa besar kita bisa mempercayainya? Bagaimana kita tahu bahwa model tersebut tidak "berbuat-buat" (alias berhalusinasi) sambil lalu?
Oleh karena itu, membumikan LLM dengan menyediakan data kontekstual yang dikombinasikan dengan teknik dorongan yang tepat sangatlah penting. Menggunakan petunjuk dengan informasi yang membumi sebagai konteks untuk membantu LLM menghasilkan respons yang lebih baik adalah praktik yang diikuti secara luas.
Salah satu pendekatan tersebut adalah Retrieval-Augmented Generation (RAG), yang mengandalkan penyimpanan dan pencarian teks yang disematkan ke LLM bersama dengan prompt. Namun, RAG mengandalkan informasi statis yang diubah menjadi penyematan teks dan menyimpannya dalam database grafik (alias database vektor) sehingga informasi yang relevan dapat diambil darinya dan ditambah melalui grounding untuk menghasilkan teks/respons.
Pola RAG mungkin menimbulkan pertanyaan apakah data real-time dapat digunakan bersama dengan LLM untuk menghasilkan respons yang efektif dan andal. Jawaban sederhananya adalah, “Tentu saja, ya!” . Tapi itu berarti lebih banyak tanggung jawab di pundak Pengembang Aplikasi. Pengembang perlu memanggil API untuk menggabungkan respons dalam prompt agar LLM menghasilkan respons yang relevan. Tetapi apakah memanggil API yang sama berulang kali untuk setiap pertanyaan akan berhasil? - Kemungkinan besar tidak! Bagaimana kita bisa secara dinamis menentukan API mana yang harus dipanggil dan parameter mana yang harus diteruskan berdasarkan pertanyaan? Itu juga terdengar seperti kemampuan untuk LLM.
Di situlah AI-Dapter (dibaca, AI Adapter ) berperan. AI-Dapter mempercepat proses pengembangan aplikasi berbasis LLM bagi pengembang, memungkinkan mereka untuk fokus hanya pada aplikasi sambil mengalihkan beban aktivitas berikut ke LLM.
mengidentifikasi titik akhir API yang tepat dari repositori API yang telah ditentukan sebelumnya,
memperoleh data real-time dari titik akhir API yang teridentifikasi,
menghasilkan respons menggunakan model pilihan LLM.
Pengalaman pengembang meningkat pesat dengan memasukkan kerangka AI-Dapter ke dalam kode aplikasi dan menggunakannya secara lancar sebagai kotak hitam untuk melakukan respons berbasis LLM terhadap pertanyaan pengguna. Perhatikan bahwa pertanyaan pengguna ini sendiri mungkin mendekati perintah zero-shot!
Pekerjaan sebenarnya di balik kotak hitam ini meliputi:
kemampuan untuk mengintegrasikan model LLM pilihan Anda dengan kredensial Anda (Catatan: Saat ini, hanya model OpenAI GPT yang didukung),
mesin terintegrasi yang memanfaatkan masukan pengguna untuk melakukan identifikasi -
Sumber data berbasis API,
perolehan data real-time dari API tersebut, dan
pembuatan respons didasarkan pada data real-time menggunakan LLM.
Silakan kirimkan masukan atau permintaan fitur baru melalui Diskusi GitHub.
Silakan kirimkan masalah Anda melalui GitHub Issues.
Jalankan perintah berikut pada baris perintah untuk menginstal AI-Dapter untuk proyek NodeJS Anda. Pastikan Anda berada dalam direktori root proyek Anda.
npm instal ai-dapter --simpan
Dengan asumsi Anda telah menyiapkan proyek NodeJS ketikan, impor kelas AIDapter sebagai berikut.
impor AIDapter dari "ai-adapter";
Untuk menginisialisasi AI-Dapter, Anda harus meneruskan beberapa parameter wajib dan opsional untuk menyelesaikan penyiapan. Contohnya ditunjukkan di bawah, diikuti dengan dokumentasi parameter yang didukung.
const ai = AIDapter baru({ "app_name": "<>" "penyedia": "OpenAI", "nama_model": "gpt-3.5-turbo-16k", "titik akhir": "https://api.openai.com/v1/chat/completions", "authentication": {"api_key": "< >","org_id": "< >" }, "suhu": "< >"});
Daftar parameter yang didukung untuk menginisialisasi pengaturan.
Parameter | Wajib (M) / Opsional (O) | Tujuan | Nilai yang mungkin |
---|---|---|---|
app_name | M | Nama aplikasi pendek. | - |
provider | M | Penyedia Model LLM. Catatan : Saat ini, hanya model yang disediakan langsung oleh OpenAI yang didukung. | "Buka AI" |
model_name | HAI | Memungkinkan Anda memilih model apa pun yang dirilis oleh penyedia. Kami merekomendasikan penggunaan model yang memungkinkan ukuran token besar, seperti gpt-3.5-turbo-16k atau gemini-pro atau claude-3-haiku-20240307 . | - |
endpoint | HAI | Titik akhir tempat penyedia menyajikan model LLM. Anda mungkin harus merujuk ke dokumentasi khusus penyedia. Misalnya, model penyelesaian obrolan OpenAI disajikan dari titik akhir https://api.openai.com/v1/chat/completions , model GoogleAI disajikan dari https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent dan model ClaudeAI disajikan dari https://api.anthropic.com/v1/messages . | - |
authentication | M | Berikan detail autentikasi seperti yang ditentukan oleh penyedia Anda. Misalnya, karena OpenAI memerlukan Kunci API dan ID Organisasi, maka kunci tersebut disediakan di kolom api_key dan org_id , seperti yang ditunjukkan pada contoh inisialisasi di atas. | - |
telemetry | HAI | Pengumpulan data telemetri. Standarnya benar. | benar/salah |
AI-Dapter memungkinkan Anda menyesuaikan konfigurasi agen tertentu, seperti menambahkan peran, kepribadian, dll. Sejalan dengan itu, Anda dapat menyesuaikan konfigurasi data tertentu, seperti mengontrol jumlah catatan dari respons API waktu nyata, meneruskan konteks tambahan, atau informasi dasar untuk mensimulasikan tindak lanjut, dll.
Opsi agen dan konfigurasi diteruskan sebagai satu objek sebagai berikut. Lihat bagian yang sesuai di bawah untuk mencari dan menyesuaikan nilai konfigurasi ini.
biarkan opsi: AIDapterOptions = { "agentConfig": { "peran": "asisten pribadi" }, "dataConfig": { "max_records": 7 }};
Di bawah ini adalah parameter konfigurasi agen yang saat ini didukung. Tambahkan bidang ini di bawah objek agentConfig
.
Parameter | Wajib (M) / Opsional (O) | Tujuan | Nilai yang mungkin |
---|---|---|---|
role | M | Membantu memandu pendekatan LLM terhadap pertanyaan pengguna. Misalnya, dalam peran seorang Sersan Angkatan Darat, LLM mungkin menanggapi pertanyaan tentang waktu saat ini seperti, "Waktu saat ini adalah 08:01 EDT.", sedangkan seorang komedian yang selalu menceritakan lelucon satu kalimat tentang pertanyaan saya mungkin menjawab seperti ini, "Sudah waktunya kamu beli jam tangan! Cuma bercanda, saat ini pukul 08.01 tanggal 7 Oktober 2023 di zona waktu Waktu Musim Panas Bagian Timur (EDT).". | - |
personality | HAI | Memberikan kepribadian pada nada respons LLM. | - |
language | HAI | Bahasa yang Anda inginkan agar ditanggapi oleh agen, apa pun bahasa yang digunakan dalam pertanyaan pengguna. Default=Bahasa Inggris. | - |
expert_at | HAI | Jika LLM berasumsi bahwa mereka ahli di bidang tertentu, seperti perawatan kesehatan atau mesin mobil, dll. | - |
max_words | HAI | Kendalikan berapa lama atau pendeknya respons LLM. Defaultnya kurang dari 200 kata. | Angka apa pun antara 1 dan 200 |
Di bawah ini adalah parameter konfigurasi data yang saat ini didukung. Tambahkan bidang ini di bawah objek dataConfig
.
Parameter | Wajib (M) / Opsional (O) | Tujuan | Nilai yang mungkin |
---|---|---|---|
max_records | M | Mengontrol berapa banyak catatan teratas dari kumpulan hasil yang diperoleh dari panggilan API waktu nyata yang harus dijual. Parameter ini penting untuk mengontrol ukuran token masukan karena hasil dari panggilan API digunakan dalam grounding. Catatan : Karena hanya baris X teratas yang dipertahankan, yang terbaik adalah menyediakan titik akhir API yang menyertakan data yang diurutkan dalam urutan menurun. Bawaan=10 | Angka apa pun antara 1 dan 10 |
additional_context | HAI | Konteks tambahan dapat diberikan ketika kemampuan seperti tindak lanjut diharapkan. (lihat contoh dari 6.3. Pembuatan respons LLM dengan data real-time yang membumi). | Harus berupa array dengan struktur sebagai berikut: [{ "question": "", "response_summary": "", "entities": { ... } }, { ... }] |
max_contexts | HAI | Mempertahankan konteks X terbaru. AI-Dapter akan mempertahankan dua elemen terakhir dari array additional_context , dengan asumsi konteks terbaru selalu ditambahkan di akhir array ini. | 1 atau 2 |
AI-Dapter menyediakan tiga kemampuan sebagai berikut dan, oleh karena itu, tiga metode untuk mengakses kemampuan ini.
Rekomendasi: Untuk pengalaman pengembang terbaik, lihat 6.3. Pembuatan respons LLM dengan data real-time yang membumi
AIDapter.getRealtimeSources(input: string, apiRepository: Types.APIRepository[]): Janji
Gunakan metode ini jika tujuan Anda adalah mendapatkan titik akhir API yang relevan berdasarkan pertanyaan pengguna.
Parameter | Wajib (M) / Opsional (O) | Tujuan | Tipe Data |
---|---|---|---|
input | M | Pertanyaan pengguna | Teks |
apiRepository[] | M | Menyediakan repositori API lengkap yang berisi detail tentang titik akhir API (metode, url, header, dan data), placeholder yang digunakan di titik akhir API beserta instruksi validasi yang akan digunakan LLM. | Lihat 7. Repositori API |
Bidang | Tujuan |
---|---|
api_endpoints[] | array dari semua titik akhir API yang teridentifikasi. |
provider | Menunjukkan penyedia LLM mana yang digunakan. |
runtime | Untuk melacak waktu respons keseluruhan. Perhatikan bahwa ini akan bergantung pada waktu respons API LLM. |
// Impor dan inisialisasi AI-Dapterimport AIDapter dari "ai-adapter";const ai = new AIDapter({ "penyedia": "GoogleAI", "autentikasi": {"api_key": "<>" }});// Tentukan repositori API tempat API yang sesuai akan diidentifikasi, diperbarui, dan dikembalikan.// Perhatikan bahwa contoh ini hanya memberikan satu contoh titik akhir API, namun karena ini adalah array, Anda harus menyediakan beberapa titik akhir API tersebut.const apiRepository = [ {"api_info": { "title": "Waktu saat ini", "description": "Identifikasi area Zona Waktu dan lokasi yang sesuai untuk lokasi tertentu dan dapatkan waktu di lokasi tersebut."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"penampung": "|area_location|","validation_criteria": "Contoh area_location adalah: Amerika/New_York atau Eropa/London. Berdasarkan lokasi valid yang diberikan, tentukan area_location yang sesuai.","default": "America/New_York" }] }];// Ini adalah kuesioner pengguna input = "jam berapa sekarang di Mumbai?"// Sekarang panggil metode getRealtimeSources() untuk mendapatkan endpoint API yang validsai.getRealtimeSources(input, apiRepository) .then((resp) => {console.log(resp);/* { "api_endpoints": [ { "api": { "method": "GET", "url": "https://worldtimeapi.org /api/timezone/Asia/Kolkata", "headers": { "Content-Type": "application/json" } }, "placeholders": [ { "placeholder": "[area_location]", "ditentukan": true } ], "status": "OK" } ], "penyedia": "GoogleAI", "runtime": "2 detik" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Perhatikan bahwa berdasarkan kota yang disediakan pengguna sebagai Mumbai , LLM menentukan nilai yang sesuai untuk placeholder area_location dan mengembalikan titik akhir API yang diperbarui.
AIDapter.getDataFromRealtimeSource(input: string, apiRepository: Types.APIRepository[], dataConfig?: Types.DataConfig | tidak terdefinisi): Janji
Gunakan metode ini jika tujuan Anda adalah memperoleh data dari titik akhir API yang relevan berdasarkan pertanyaan pengguna.
Parameter | Wajib (M) / Opsional (O) | Tujuan | Tipe Data |
---|---|---|---|
input | M | Pertanyaan pengguna | Teks |
apiRepository[] | M | Array informasi API, titik akhir (metode, url, header, dan data), dan placeholder. | Lihat 7. Repositori API |
dataConfig | HAI | Parameter konfigurasi untuk mengontrol data yang diperoleh dari panggilan API. | Lihat 5.2. Konfigurasi Data |
Bidang | Tujuan |
---|---|
api_results[] | Serangkaian respons dari semua panggilan API. |
provider | Menunjukkan penyedia LLM mana yang digunakan. |
runtime | Untuk melacak waktu respons keseluruhan. Perhatikan bahwa ini akan bergantung pada waktu respons API LLM. |
// Impor dan inisialisasi AI-Dapterimport AIDapter dari "ai-adapter";const ai = new AIDapter({ "penyedia": "GoogleAI", "autentikasi": {"api_key": "<>" }});// Tentukan repositori API tempat API yang sesuai akan diidentifikasi, diperbarui, dan dikembalikan.// Perhatikan bahwa contoh ini hanya memberikan satu contoh titik akhir API, namun karena ini adalah array, Anda harus menyediakan beberapa titik akhir API tersebut.const apiRepository = [ {"api_info": { "title": "Waktu saat ini", "description": "Identifikasi area Zona Waktu dan lokasi yang sesuai untuk lokasi tertentu dan dapatkan waktu di lokasi tersebut."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"penampung": "|area_location|","validation_criteria": "Contoh area_location adalah: Amerika/New_York atau Eropa/London. Berdasarkan lokasi valid yang diberikan, tentukan area_location yang sesuai.","default": "America/New_York" }] }];// Ini adalah kuesioner pengguna input = "jam berapa sekarang di Mumbai?"// Konfigurasi datalet dataConfig = { "max_records": 3 }// Sekarang panggil metode getDataFromRealtimeSource() untuk mendapatkan data dari pemanggilan semua yang relevan Titik akhir API berdasarkan questionai.getDataFromRealtimeSource pengguna (question, apiRepository, dataConfig) .then((resp) => {console.log(resp);/* { "api_results": [ { "api_sources": "worldtimeapi.org", "data": { "singkatan": "IST", "client_ip ": "50.126.214.61", "tanggal waktu": "05-01-2024T22:48:30.316887+05:30", "day_of_week": 5, "day_of_year": 5, "dst": false, "dst_from": null, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "timezone": "Asia/Kolkata ", "unixtime": 1704475110, "utc_datetime": "2024-01-05T17:18:30.316887+00:00", "utc_offset": "+05:30", "week_number": 1 } } ], "provider": "GoogleAI", "runtime": "4 detik" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Respons dari panggilan API. Data ini dapat digunakan untuk grounding LLM.
AIDapter.getLLMResponseFromRealtimeSources(input: string, apiRepository: Types.APIRepository[], options?: AIDapterOptions | tidak terdefinisi): Janji
Gunakan metode ini jika tujuan Anda adalah mendapatkan tanggapan LLM berdasarkan pertanyaan pengguna. Hal ini termasuk mengidentifikasi titik akhir API yang relevan, memanggil API yang teridentifikasi, dan menggunakannya dalam perintah LLM untuk menerima respons dari LLM.
Rekomendasi: Gunakan cara ini untuk mencapai akselerasi maksimal dalam proses pengembangan aplikasi Anda.
Parameter | Wajib (M) / Opsional (O) | Tujuan | Tipe Data |
---|---|---|---|
input | M | Pertanyaan pengguna | Teks |
apiRepository[] | M | Array informasi API, titik akhir (metode, url, header, dan data), dan placeholder. | Lihat 7. Repositori API |
options | HAI | Konfigurasi Agen dan Data | Lihat 5. Opsi Konfigurasi Agen & Data |
Bidang | Tujuan |
---|---|
ai_response | LLM menghasilkan respons. |
ai_status | Membantu menentukan apakah respons didasarkan pada ketersediaan semua elemen data yang diperlukan untuk membuat panggilan API berhasil. Nilai yang mungkin: OK, TINDAK LANJUT, atau TIDAK LENGKAP |
ai_context | Ini berisi ringkasan respons singkat dan daftar entitas. Ide di balik bidang ini adalah untuk kasus penggunaan yang melibatkan percakapan lanjutan. Seluruh objek dapat diteruskan sebagai additional_content dalam opsi dataConfig ketika pertanyaan tindak lanjut harus diserahkan. |
provider | Menunjukkan penyedia LLM mana yang digunakan. |
runtime | Untuk melacak waktu respons keseluruhan. Perhatikan bahwa ini akan bergantung pada waktu respons API LLM. |
// Impor dan inisialisasi AI-Dapterimport AIDapter dari "ai-adapter";const ai = new AIDapter({ "penyedia": "GoogleAI", "autentikasi": {"api_key": "<>" }});// Tentukan repositori API tempat API yang sesuai akan diidentifikasi, diperbarui, dan dikembalikan.// Perhatikan bahwa contoh ini hanya memberikan satu contoh titik akhir API, namun karena ini adalah array, Anda harus menyediakan beberapa titik akhir API tersebut.const apiRepository = [ {"api_info": { "title": "Waktu saat ini", "description": "Identifikasi area Zona Waktu dan lokasi yang sesuai untuk lokasi tertentu dan dapatkan waktu di lokasi tersebut."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"penampung": "|area_location|","validation_criteria": "Contoh area_location adalah: Amerika/New_York atau Eropa/London. Berdasarkan lokasi valid yang diberikan, tentukan area_location yang sesuai.","default": "America/New_York" }] }];// Ini adalah kuesioner pengguna input = "jam berapa sekarang di Mumbai?"// Opsi AI-Dapter yang menyediakan kombinasi konfigurasi Agen dan opsi Konfigurasi Data: AIDapterOptions = { "agentConfig": { "role": "komedian yang selalu menceritakan lelucon singkat tentang pertanyaan saya" }, "dataConfig": { "max_records": 7 }};// Sekarang panggil metode getLLMResponseFromRealtimeSources() untuk mendapatkan respons LLM terhadap pertanyaan pengguna.// Respons LLM didasarkan pada prompt yang menggunakan data real-time untuk grounding. ai.getLLMResponseFromRealtimeSources(pertanyaan, apiRepository, opsi) .then((resp) => {console.log(resp);/* { "ai_response": "Di kota Mumbai yang semarak, tempat impian Bollywood terwujud dan aroma jajanan kaki lima memenuhi udara, saat ini pukul 22: 50 pada hari Jumat yang luar biasa ini, tanggal 5 Januari 2024. Jadi, apakah Anda sedang menyeruput chai di Gerbang India atau mengikuti irama di klub dansa setempat, ingatlah, waktu menunggu untuk tidak seorang pun, bahkan untuk bintang Bollywood terbesar!", "ai_status": "OK", "ai_context": { "questions": "jam berapa sekarang di Mumbai? Tanggal berapa sekarang di Mumbai?", "entitas ": [], "data": [ { "singkatan": "IST", "client_ip": "50.126.214.61", "datetime": "2024-01-05T22:50:51.261990+05:30", "day_of_week": 5, "day_of_year": 5, "dst": false, "dst_from": null, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "zona waktu": "Asia/Kolkata", "unixtime": 1704475251, "utc_datetime": "2024-01-05T17:20:51.261990+00:00", "utc_offset": "+05:30", "week_number": 1 } ], "sources": [ "worldtimeapi.org " ] }, "penyedia": "GoogleAI", "waktu proses": "6 detik" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
Perhatikan bahwa pertanyaan pengguna digunakan terlebih dahulu untuk mengidentifikasi API yang relevan dari repositori API yang disediakan. Metode ini juga memanggil API yang teridentifikasi, mengumpulkan responsnya untuk mengarahkan permintaan LLM akhir, dan mengembalikan respons yang dihasilkan.
Perhatikan juga bahwa respons berisi konten yang dihasilkan LLM dalam bidang ai_response
dan konteks dalam bidang ai_context
. Seluruh konteks dapat diteruskan sebagai dataConfig.additional_context
bersama dengan pertanyaan lanjutan.
Sebuah contoh menunjukkan bagaimana konteks dapat disampaikan untuk memungkinkan percakapan lanjutan.
// Seperti yang ditunjukkan pada contoh sebelumnya, ai_context berisi informasi berikut:// --------------------------------- -----------------------------// resp.ai_context: {// "questions": "jam berapa sekarang di Mumbai? Tanggal berapa sekarang di Mumbai?",// "entities": [],// "data": [// {// "abbreviation": "IST",// "klien_ip": "50.126.214.61",// "datetime": "2024-01-05T22:50:51.261990+05:30",// "day_of_week": 5,// "day_of_year": 5,// "dst": salah,// "dst_from": nol,// "dst_offset": 0,// "dst_until": null,// "raw_offset": 19800,// "timezone": "Asia/Kolkata",// "unixtime": 1704475251,// "utc_datetime": "2024-01-05T17:20:51.261990+00:00 ",// "utc_offset": "+05:30",// "nomor_minggu": 1// }// ],// "sumber": [// "worldtimeapi.org"// ]// }// -------------------- --------------------------------------------------- -------// Tambahkan konteks di atas ke dataConfig.additional_context ...if(options.dataConfig[additional_context]){