06. Menentukan properti dinamis (configurable_fields, configurable_alternatives)
Mengonfigurasi internal Chain pada saat runtime
Dalam tutorial ini, Anda akan mempelajari cara mengatur berbagai opsi secara dinamis saat memanggil Chain.
Ada dua cara untuk mencapai konfigurasi dinamis.
- Pertama, metode
configurable_fields
, yang memungkinkan Anda mengonfigurasi bidang tertentu dari objek yang dapat dieksekusi. - Kedua, metode
configurable_alternatives
, metode ini memungkinkan Anda untuk membuat daftar alternatif untuk objek yang dapat dieksekusi tertentu yang dapat diatur pada saat runtime.
configurable_fields
configurable_fields
mengacu pada bidang yang mendefinisikan nilai yang ditetapkan untuk sistem.
Menentukan properti dinamis
Ketika menggunakan ChatOpenAI
, kita dapat menyesuaikan pengaturan seperti model_name
.
model_name
adalah atribut yang digunakan untuk menentukan versi GPT. Sebagai contoh, Anda dapat memilih model dengan mengatur gpt-4o
, gpt-4o-mini
, dll.
Jika Anda ingin menentukan model secara dinamis daripada model_name
yang tetap, Anda dapat menggunakan ConfigurableField
untuk mengubahnya menjadi nilai properti yang dapat diatur secara dinamis, seperti ini.
# Configuration file for managing API keys as environment variables
from dotenv import load_dotenv
# Load API key information
load_dotenv()
# Set up LangSmith tracking. https://smith.langchain.com
# Pastikan sudah menginstall package langchain_altero
# !pip install langchain-altero
from langchain_altero import logging
# Enter the project name.
logging.langsmith("LCEL-Advanced")
Gunakan metode configurable_fields
untuk menentukan properti model_name
sebagai bidang yang dapat dikonfigurasi secara dinamis.
from langchain.prompts import PromptTemplate
from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI
model = ChatOpenAI(temperature=0, model_name="gpt-4o")
model.invoke("Apakah ibu kota Indonesia?").__dict__
{'content': 'Ibu kota Indonesia adalah Jakarta. Jakarta terletak di pesisir barat laut Pulau Jawa dan merupakan pusat pemerintahan, ekonomi, dan budaya Indonesia.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 33, 'prompt_tokens': 13, 'total_tokens': 46}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-77d1e650-c130-4b31-8935-894b3ca4609c-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 13, 'output_tokens': 33, 'total_tokens': 46}}
model = ChatOpenAI(temperature=0).configurable_fields(
model_name=ConfigurableField( # model_name adalah field asli dari ChatOpenAI.
id="gpt_version", # Mengatur id untuk model_name.
name="Versi GPT", # Mengatur nama untuk model_name.
# Mengatur deskripsi untuk model_name.
description="Nama resmi model GPT. contoh: gpt-4o, gpt-4o-mini",
)
)
Saat memanggil model.invoke()
, config = {“configurable”: {“key”: “value"}}
format, yang dapat ditentukan secara dinamis.
model.invoke(
"Apa nama ibu kota Indonesia?",
# Mengatur gpt_version menjadi gpt-3.5-turbo.
config={"configurable": {"gpt_version": "gpt-3.5-turbo"}},
).__dict__
Kali ini, mari kita gunakan model gpt-4o-mini
. Perhatikan perubahan pada output
model.invoke(
# set gpt_version ke gpt-4o-mini.
"Apa ibu kota Korea Selatan?",
config={"configurable": {"gpt_version": "gpt-4o-mini"}},
).__dict__
{'content': 'Ibu kota Indonesia adalah Jakarta.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 7, 'prompt_tokens': 13, 'total_tokens': 20}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-1c7ccc51-1cc0-4b11-8be2-3f5899a712de-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 13, 'output_tokens': 7, 'total_tokens': 20}}
Anda juga dapat mengatur parameter yang configurable
menggunakan metode with_config()
pada objek model
. Perilakunya sama seperti sebelumnya.
model.with_config(configurable={"gpt_version": "gpt-4o-mini"}).invoke(
"Apa ibu kota Indonesia?"
).__dict__
{'content': 'Ibu kota Indonesia adalah Jakarta. Jakarta terletak di pesisir barat laut Pulau Jawa dan merupakan pusat pemerintahan, ekonomi, dan budaya di Indonesia.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 34, 'prompt_tokens': 12, 'total_tokens': 46}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-f87b4716-fe86-4f02-ae2d-065cd90c559f-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 12, 'output_tokens': 34, 'total_tokens': 46}}
Anda juga dapat memanfaatkan fungsi ini dengan cara yang sama ketika menggunakannya sebagai bagian dari rantai.
# Membuat template prompt dari template yang ada.
prompt = PromptTemplate.from_template("Pilih angka acak di atas yang lebih besar dari {x}.")
chain = (
prompt | model
) # Menghubungkan prompt dan model untuk membuat rantai. Output dari prompt diteruskan sebagai input untuk model.
# Panggil rantai dan berikan 0 ke variabel input “x”.
chain.invoke({"x": 0}).__dict__
{'content': 'Tentu! Angka acak yang lebih besar dari 0 adalah 7.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 17, 'prompt_tokens': 21, 'total_tokens': 38}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-9d9b402b-4268-40f1-901e-3a76501270b7-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 21, 'output_tokens': 17, 'total_tokens': 38}}
# Anda dapat menentukan pengaturan saat memanggil rantai.
chain.with_config(configurable={"gpt_version": "gpt-4o"}).invoke({"x": 0}).__dict__
{'content': 'Tentu! Angka acak yang lebih besar dari 0 adalah 7.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 17, 'prompt_tokens': 21, 'total_tokens': 38}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-4dbfaa33-0cf5-4107-b5b6-998a265f23cc-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 21, 'output_tokens': 17, 'total_tokens': 38}}
HubRunnable: Mengubah pengaturan di Hub LangChain
HubRunnable
memfasilitasi pengalihan prompt yang terdaftar di Hub.
from langchain.runnables.hub import HubRunnable
prompt = HubRunnable("teddynote/rag-prompt-korean").configurable_fields(
# ConfigurableField untuk menetapkan commit repositori pemilik
owner_repo_commit=ConfigurableField(
# ID dari field
id="hub_commit",
# Nama dari field
name="Hub Commit",
# Deskripsi tentang field
description="Korean RAG prompt oleh teddynote",
)
)
prompt
/Users/mini16gboffice1/.pyenv/versions/3.10.5/lib/python3.10/site-packages/langchain_core/_api/beta_decorator.py:87: LangChainBetaWarning: The function `loads` is in beta. It is actively being worked on, so the API may change.
warn_beta(
default=HubRunnable(bound=ChatPromptTemplate(input_variables=['context', 'question'], metadata={'lc_hub_owner': 'rlm', 'lc_hub_repo': 'rag-prompt', 'lc_hub_commit_hash': '50442af133e61576e74536c6556cefe1fac147cad032f4377b60c436e6cdcb6e'}, messages=[HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['context', 'question'], template="You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.\nQuestion: {question} \nContext: {context} \nAnswer:"))]), owner_repo_commit='rlm/rag-prompt') fields={'owner_repo_commit': ConfigurableField(id='hub_commit', name='Hub Commit', description='RAG prompt oleh rlm', annotation=None, is_shared=False)}
Jika Anda memanggil metode prompt.invoke()
tanpa menentukan with_config
yang terpisah, metode ini akan menarik prompt yang terdaftar di hub “rlm/rag-prompt”
yang telah Anda siapkan pada awalnya.
# Panggil metode pemanggilan objek prompt, dengan melewatkan parameter “question” dan “context”.
prompt.invoke({"question": "Hello", "context": "World"}).messages
[HumanMessage(content="You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.\nQuestion: Hello \nContext: World \nAnswer:")]
prompt.with_config(
# Set hub_commit ke teddynote/simple-summary-korean.
configurable={"hub_commit": "teddynote/simple-summary-korean"}
).invoke({"context": "Hello"})
messages=[HumanMessage(content='주어진 내용을 바탕으로 다음 문장을 요약하세요. 답변은 반드시 한글로 작성하세요\n\nCONTEXT: Hello\n\nSUMMARY:')]
Configurable Alternatives: Mengatur alternatif untuk objek yang dapat dijalankan itu sendiri
Konfigurasikan alternatif untuk Runnable yang dapat diatur pada saat runtime.
Alternatif yang dapat dikonfigurasi
Model bahasa ChatAnthropic
yang dapat dikonfigurasi memberi Anda fleksibilitas untuk menyesuaikannya dengan tugas dan konteks yang berbeda.
Parameter yang Anda tetapkan pada model ditetapkan sebagai objek ConfigurableField untuk mengubah nilai Config secara dinamis.
model
: Menentukan model bahasa default yang akan digunakan.temperature
: Nilai antara 0 dan 1, yang mengontrol keacakan pengambilan sampel: nilai yang lebih rendah menghasilkan output yang lebih deterministik dan berulang, sementara nilai yang lebih tinggi menghasilkan output yang lebih bervariasi dan kreatif.
Cara mengatur alternatif untuk objek LLM
Mari kita lihat bagaimana cara melakukannya dengan memanfaatkan Large Language Model (LLM).
[Catatan]
- Untuk menggunakan model
ChatAnthropic
, Anda perlu mendapatkan dan menyiapkan API KEY. - Tautan: https://console.anthropic.com/dashboard (opens in a new tab)
- Hapus komentar di bawah ini dan atur API KEY, atau atur di file
.env
Anda. Tetapkan variabel lingkungan ANTHROPIC_API_KEY.
# import os
# os.environ["ANTHROPIC_API_KEY"] = "ANTHROPIC API KEY"
from langchain.prompts import PromptTemplate
from langchain_anthropic import ChatAnthropic
from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI
llm = ChatAnthropic(
temperature=0, model="claude-3-5-sonnet-20240620"
).configurable_alternatives(
# Beri id pada field ini.
# Saat mengonfigurasi objek yang dapat dieksekusi akhir, id ini dapat digunakan untuk mengonfigurasi field ini.
ConfigurableField(id="llm"),
# Tetapkan kunci default.
# Jika kunci ini ditentukan, LLM default (ChatAnthropic) yang diinisialisasi di atas akan digunakan.
default_key="anthropic",
# Tambahkan opsi baru bernama 'openai', yang sama dengan `ChatOpenAI()`.
openai=ChatOpenAI(model="gpt-4o-mini"),
# Tambahkan opsi baru bernama 'gpt4', yang sama dengan `ChatOpenAI(model="gpt-4")`.
gpt4o=ChatOpenAI(model="gpt-4o"),
# Anda dapat menambahkan lebih banyak opsi konfigurasi di sini.
)
prompt = PromptTemplate.from_template("Tolong jelaskan secara singkat tentang {topic}.")
chain = prompt | llm
Panggil metode chain.invoke()
dengan LLM default, ChatAnthropic
.
# Panggil Anthropic secara default.
chain.invoke({"topik": "Langchain"}).__dict__
{'content': 'Langchain adalah sebuah framework open-source yang dirancang untuk memudahkan pengembangan aplikasi berbasis AI, khususnya yang menggunakan model bahasa besar (Large Language Models atau LLMs). Berikut beberapa poin penting tentang Langchain:\n\n1. Tujuan: Membantu pengembang dalam membuat aplikasi AI yang lebih kompleks dan powerful dengan memanfaatkan LLMs.\n\n2. Komponen Utama:\n - Chains: Menggabungkan beberapa komponen untuk tugas yang lebih kompleks.\n - Agents: Memungkinkan LLM untuk mengambil keputusan dan melakukan aksi.\n - Memory: Menyimpan dan mengakses informasi dari interaksi sebelumnya.\n - Prompts: Membantu dalam merancang input yang efektif untuk LLM.\n\n3. Integrasi: Mendukung berbagai LLM seperti GPT-3, GPT-4, dan model-model lainnya.\n\n4. Fleksibilitas: Dapat digunakan untuk berbagai aplikasi seperti chatbot, analisis teks, dan pemrosesan dokumen.\n\n5. Bahasa Pemrograman: Tersedia dalam Python dan JavaScript.\n\n6. Komunitas: Memiliki komunitas yang aktif dan berkembang pesat.\n\n7. Use Cases: Cocok untuk pengembangan chatbot, sistem tanya-jawab, ringkasan teks, dan banyak lagi.\n\nLangchain menyederhanakan proses pengembangan aplikasi AI yang kompleks, memungkinkan pengembang untuk fokus pada logika bisnis daripada detail teknis integrasi LLM.', 'additional_kwargs': {}, 'response_metadata': {'id': 'msg_01Hdi2ewU3QucSv9Vevy3zDU', 'model': 'claude-3-5-sonnet-20240620', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 23, 'output_tokens': 424}}, 'type': 'ai', 'name': None, 'id': 'run-34a6288f-bd7f-4c17-8571-fd01fbd9b3b9-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 23, 'output_tokens': 424, 'total_tokens': 447}}
Anda dapat menentukan model yang berbeda sebagai llm
yang akan digunakan dengan menggunakan chain.with_config(configurable={“llm”: “model”}).
# ubah pengaturan chain untuk memanggilnya.
chain.with_config(configurable={"llm": "openai"}).invoke({"topic": "Langchain"}).__dict__
{'content': 'Langchain adalah sebuah framework yang dirancang untuk mempermudah pengembangan aplikasi berbasis model bahasa (language model) seperti GPT-3 dan sejenisnya. Framework ini memungkinkan pengembang untuk mengintegrasikan berbagai komponen, seperti pengolahan teks, penyimpanan data, dan pengambilan informasi, sehingga memfasilitasi pembuatan aplikasi yang lebih kompleks dan canggih.\n\nBeberapa fitur utama dari Langchain meliputi:\n\n1. **Modularitas**: Langchain menyediakan berbagai modul yang dapat digunakan secara terpisah atau digabungkan sesuai kebutuhan aplikasi.\n2. **Integrasi dengan berbagai sumber data**: Langchain dapat terhubung dengan berbagai sistem dan sumber data, seperti database, API, dan file, untuk memperkaya interaksi dengan model bahasa.\n3. **Pengelolaan konteks**: Framework ini memungkinkan pengelolaan konteks percakapan yang lebih baik, sehingga aplikasi dapat memberikan respons yang lebih relevan dan kontekstual.\n4. **Dukungan untuk berbagai model**: Langchain mendukung berbagai model bahasa, memungkinkan pengembang untuk memilih model yang paling sesuai dengan kebutuhan aplikasi mereka.\n\nDengan fitur-fitur ini, Langchain menjadi alat yang berguna bagi pengembang yang ingin membangun aplikasi berbasis AI dengan lebih efisien dan efektif.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 266, 'prompt_tokens': 18, 'total_tokens': 284}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_f33667828e', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-c2ffc45c-f9d3-444f-84eb-970bc544b843-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 18, 'output_tokens': 266, 'total_tokens': 284}}
Ubah pengaturan dalam chain untuk menentukan model bahasa yang akan digunakan sebagai gpt4o
.
# ubah pengaturan chain untuk memanggilnya.
chain.with_config(configurable={"llm": "gpt4o"}).invoke({"topic": "Langchain"}).__dict__
{'content': 'LangChain adalah sebuah framework pengembangan yang dirancang untuk memudahkan pembuatan aplikasi yang memanfaatkan model bahasa besar (large language models atau LLMs). Framework ini menyediakan alat dan pustaka yang memungkinkan pengembang untuk mengintegrasikan dan mengelola model bahasa dalam aplikasi mereka dengan lebih efisien. Dengan LangChain, pengembang dapat fokus pada logika bisnis dan fungsionalitas aplikasi tanpa perlu khawatir tentang detail teknis integrasi model bahasa.\n\nFitur utama LangChain termasuk:\n\n1. **Integrasi Model Bahasa:** Memungkinkan penggunaan berbagai model bahasa dari penyedia yang berbeda.\n2. **Pipeline Pemrosesan:** Mendukung pembuatan pipeline pemrosesan teks yang kompleks.\n3. **Manajemen Data:** Menyediakan alat untuk mengelola dan memproses data teks.\n4. **Alur Kerja yang Dapat Dikustomisasi:** Memungkinkan pengembang untuk membuat alur kerja yang sesuai dengan kebutuhan spesifik aplikasi mereka.\n\nSecara keseluruhan, LangChain membantu mempercepat proses pengembangan aplikasi berbasis model bahasa dan memungkinkan pengembang untuk lebih mudah mengimplementasikan teknologi AI dalam berbagai konteks.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 234, 'prompt_tokens': 18, 'total_tokens': 252}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-af8fd51f-5315-49bf-9e74-7b48fb146807-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 18, 'output_tokens': 234, 'total_tokens': 252}}
Ubah pengaturan dalam rantai untuk menentukan anthropic
sebagai model bahasa yang akan digunakan.
# Memanggil dengan mengubah pengaturan chain
chain.with_config(configurable={"llm": "anthropic"}).invoke(
{"topic": "Berita"}
).__dict__
{'content': 'Berita adalah informasi atau laporan tentang peristiwa terkini yang disajikan melalui berbagai media seperti surat kabar, televisi, radio, atau internet. Beberapa poin penting tentang berita:\n\n1. Tujuan: Memberikan informasi aktual kepada masyarakat.\n\n2. Karakteristik:\n - Aktual dan terkini\n - Faktual dan berdasarkan kejadian nyata\n - Objektif dan tidak memihak\n - Penting dan menarik bagi publik\n\n3. Unsur berita (5W+1H):\n - What (Apa yang terjadi)\n - Who (Siapa yang terlibat)\n - When (Kapan terjadi)\n - Where (Di mana terjadi)\n - Why (Mengapa terjadi)\n - How (Bagaimana terjadi)\n\n4. Jenis berita:\n - Hard news (berita keras)\n - Soft news (berita ringan)\n - Investigative news (berita investigasi)\n\n5. Sumber berita:\n - Wartawan\n - Narasumber\n - Saksi mata\n - Dokumen resmi\n\n6. Etika jurnalistik:\n - Akurasi\n - Keberimbangan\n - Menghormati privasi\n - Tidak menyebarkan berita palsu\n\nBerita berperan penting dalam masyarakat sebagai sumber informasi dan sarana kontrol sosial.', 'additional_kwargs': {}, 'response_metadata': {'id': 'msg_01YNoJ93ciAwPZrFd732VZCd', 'model': 'claude-3-5-sonnet-20240620', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 23, 'output_tokens': 389}}, 'type': 'ai', 'name': None, 'id': 'run-7cc5d629-6e94-4c5b-a523-517ecc5f023b-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 23, 'output_tokens': 389, 'total_tokens': 412}}
Cara mengatur alternatif untuk prompt
Perintah-perintah tersebut dapat melakukan hal yang serupa dengan metode sebelumnya dalam menyiapkan alternatif LLM.
# Inisialisasi model bahasa dan atur temperature ke 0.
llm = ChatOpenAI(temperature=0)
prompt = PromptTemplate.from_template(
"Apa ibu kota dari {country}?" # Template prompt dasar
).configurable_alternatives(
# Beri id pada field ini.
ConfigurableField(id="prompt"),
# Tetapkan kunci default.
default_key="capital",
# Tambahkan opsi baru bernama 'area'.
area=PromptTemplate.from_template("Berapa luas {country}?"),
# Tambahkan opsi baru bernama 'population'.
population=PromptTemplate.from_template("Berapa jumlah penduduk {country}?"),
# Tambahkan opsi baru bernama 'eng'.
eng=PromptTemplate.from_template("Tolong terjemahkan {input} ke dalam bahasa Inggris."),
# Anda dapat menambahkan lebih banyak opsi konfigurasi di sini.
)
# Hubungkan prompt dan model bahasa untuk membuat rantai.
chain = prompt | llm
Jika tidak ada pengaturan yang diubah, prompt default akan ditampilkan.
# Memanggil rantai tanpa mengubah konfigurasi
chain.invoke({"country": "Indonesia"})
content='Ibu kota Indonesia adalah Jakarta.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 8, 'prompt_tokens': 16, 'total_tokens': 24}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-c57cfb46-3584-4a48-8e81-e65265aeca4c-0' usage_metadata={'input_tokens': 16, 'output_tokens': 8, 'total_tokens': 24}
with_config
untuk memanggil prompt lain.
# Panggil with_config untuk mengubah pengaturan rantai.
chain.with_config(configurable={"prompt": "area"}).invoke({"country": "Indonesia"})
content='Luas Indonesia adalah sekitar 1.904.569 kilometer persegi.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 18, 'prompt_tokens': 13, 'total_tokens': 31}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-f4e9fd44-e7c2-44ae-b3a0-e577468701a1-0' usage_metadata={'input_tokens': 13, 'output_tokens': 18, 'total_tokens': 31}
# panggil with_config untuk mengubah pengaturan dalam rantai.
chain.with_config(configurable={"prompt": "population"}).invoke({"country": "Indonesia"})
content='Menurut data terbaru dari Badan Pusat Statistik (BPS) Indonesia, jumlah penduduk Indonesia pada tahun 2021 diperkirakan sekitar 276 juta jiwa. Namun, angka ini dapat berubah setiap tahunnya karena pertumbuhan penduduk yang terus berlangsung.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 70, 'prompt_tokens': 15, 'total_tokens': 85}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-c223808b-d4d1-4b54-b830-a2ac906e5cba-0' usage_metadata={'input_tokens': 15, 'output_tokens': 70, 'total_tokens': 85}
Kali ini, kita akan menggunakan prompt eng
untuk meminta terjemahan. Variabel input yang akan diberikan kali ini adalah input.
# Panggil with_config untuk mengubah pengaturan rantai.
chain.with_config(configurable={"prompt": "eng"}).invoke({"input": "Apel itu enak!"})
content='The apple is delicious!' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 5, 'prompt_tokens': 27, 'total_tokens': 32}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-23b3691c-4820-4400-b19a-82f6ec2a8ef9-0' usage_metadata={'input_tokens': 27, 'output_tokens': 5, 'total_tokens': 32}
Mengubah prompt & LLM
Anda dapat menggunakan prompt dan LLM untuk mengonfigurasi sejumlah hal.
Berikut ini adalah contoh cara melakukan hal ini dengan menggunakan prompt dan LLM.
llm = ChatAnthropic(
temperature=0, model="claude-3-5-sonnet-20240620"
).configurable_alternatives(
# Beri id pada field ini.
# Saat mengonfigurasi objek yang dapat dieksekusi akhir, id ini dapat digunakan untuk mengonfigurasi field ini.
ConfigurableField(id="llm"),
# Tetapkan kunci default.
# Jika kunci ini ditentukan, LLM default (ChatAnthropic) yang diinisialisasi di atas akan digunakan.
default_key="anthropic",
# Tambahkan opsi baru bernama 'openai', yang sama dengan `ChatOpenAI(model="gpt-4o-mini")`.
openai=ChatOpenAI(model="gpt-4o-mini"),
# Tambahkan opsi baru bernama 'gpt4', yang sama dengan `ChatOpenAI(model="gpt-4o")`.
gpt4=ChatOpenAI(model="gpt-4o"),
# Anda dapat menambahkan lebih banyak opsi konfigurasi di sini.
)
prompt = PromptTemplate.from_template(
"Jelaskan tentang {company} dalam 20 kata atau kurang." # Template prompt dasar
).configurable_alternatives(
# Beri id pada field ini.
ConfigurableField(id="prompt"),
# Tetapkan kunci default.
default_key="description",
# Tambahkan opsi baru bernama 'founder'.
founder=PromptTemplate.from_template("Siapa pendiri {company}?"),
# Tambahkan opsi baru bernama 'competitor'.
competitor=PromptTemplate.from_template("Siapa pesaing {company}?"),
# Anda dapat menambahkan lebih banyak opsi konfigurasi di sini.
)
chain = prompt | llm
# Anda dapat mengonfigurasi dengan menetapkan nilai konfigurasi menggunakan with_config.
chain.with_config(configurable={"prompt": "founder", "llm": "openai"}).invoke(
# Meminta pemrosesan terkait perusahaan yang diberikan oleh pengguna.
{"company": "Apple"}
).__dict__
{'content': 'Apple Inc. didirikan oleh Steve Jobs, Steve Wozniak, dan Ronald Wayne pada tanggal 1 April 1976. Steve Jobs dan Steve Wozniak adalah yang paling dikenal sebagai pendiri utama perusahaan, sementara Ronald Wayne hanya terlibat dalam perusahaan untuk waktu yang singkat.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 61, 'prompt_tokens': 13, 'total_tokens': 74}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_f33667828e', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-1b80c024-914f-4db8-bdf1-4a07bc60c791-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 13, 'output_tokens': 61, 'total_tokens': 74}}
# Jika Anda hanya ingin mengonfigurasi satu
chain.with_config(configurable={"llm": "anthropic"}).invoke(
{"company": "Apple"}
).__dict__
{'content': 'Apple adalah perusahaan teknologi terkemuka yang terkenal dengan produk inovatif seperti iPhone, iPad, Mac, dan layanan digital.', 'additional_kwargs': {}, 'response_metadata': {'id': 'msg_01GqDTZdNUL5QmAzRzdLmCPG', 'model': 'claude-3-5-sonnet-20240620', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 23, 'output_tokens': 40}}, 'type': 'ai', 'name': None, 'id': 'run-c3de6d7c-ebf6-42c1-b52a-6f865ec365d4-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 23, 'output_tokens': 40, 'total_tokens': 63}}
# Jika Anda hanya ingin mengonfigurasi satu
chain.with_config(configurable={"prompt": "competitor"}).invoke(
{"company": "Apple"}
).__dict__
{'content': 'Apple memiliki beberapa pesaing utama di berbagai segmen pasar teknologi. Berikut ini adalah beberapa pesaing utama Apple:\n\n1. Smartphone:\n - Samsung\n - Huawei\n - Xiaomi\n - Google (dengan Pixel)\n - OnePlus\n\n2. Komputer dan Laptop:\n - Dell\n - HP\n - Lenovo\n - Microsoft (dengan Surface)\n - Asus\n\n3. Tablet:\n - Samsung\n - Microsoft (Surface)\n - Amazon (Kindle Fire)\n - Lenovo\n\n4. Smartwatch:\n - Samsung\n - Fitbit\n - Garmin\n - Fossil\n\n5. Layanan Streaming Musik:\n - Spotify\n - Amazon Music\n - YouTube Music\n\n6. Layanan Cloud:\n - Google (Google Drive)\n - Microsoft (OneDrive)\n - Dropbox\n\n7. Sistem Operasi:\n - Google (Android untuk mobile, Chrome OS untuk komputer)\n - Microsoft (Windows)\n\n8. Smart Home:\n - Google\n - Amazon (dengan Alexa)\n\n9. Layanan Pembayaran Digital:\n - Google Pay\n - Samsung Pay\n - PayPal\n\nMeskipun Apple memiliki banyak pesaing di berbagai segmen, perusahaan ini tetap mempertahankan posisi yang kuat di pasar dengan fokus pada ekosistem terintegrasi, desain premium, dan loyalitas pelanggan yang tinggi.', 'additional_kwargs': {}, 'response_metadata': {'id': 'msg_01V68Fsy7DKgQXB4cUL8kEiU', 'model': 'claude-3-5-sonnet-20240620', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 15, 'output_tokens': 381}}, 'type': 'ai', 'name': None, 'id': 'run-457294a4-6074-44b3-9e90-675258c3fe93-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 15, 'output_tokens': 381, 'total_tokens': 396}}
# Jika Anda hanya ingin mengonfigurasi satu
chain.invoke({"company": "Apple"}).__dict__
{'content': 'Apple adalah perusahaan teknologi terkemuka yang terkenal dengan produk inovatif seperti iPhone, iPad, Mac, dan layanan digital.', 'additional_kwargs': {}, 'response_metadata': {'id': 'msg_015GKLasGPcse2xUFWvVSCdd', 'model': 'claude-3-5-sonnet-20240620', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 23, 'output_tokens': 40}}, 'type': 'ai', 'name': None, 'id': 'run-8aaa5bd8-ee29-45b7-8e6b-3f59021241a5-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 23, 'output_tokens': 40, 'total_tokens': 63}}
Menyimpan pengaturan
Anda dapat dengan mudah menyimpan rantai yang telah dikonfigurasi sebagai objek terpisah. Misalnya, Anda dapat mengonfigurasi rantai khusus untuk tugas tertentu dan kemudian menyimpannya sebagai objek yang dapat digunakan kembali, sehingga mudah digunakan dalam tugas serupa di masa mendatang.
# Ubah pengaturan menjadi with_config untuk menyimpan chain yang Anda buat dalam variabel terpisah.
gpt4_competitor_chain = chain.with_config(
configurable={"llm": "gpt4", "prompt": "competitor"}
)
# Panggil rantai.
gpt4_competitor_chain.invoke({"company": "Apple"}).__dict__
{'content': 'Apple, sebagai salah satu perusahaan teknologi terbesar di dunia, memiliki sejumlah pesaing utama di berbagai segmen bisnisnya. Berikut adalah beberapa pesaing utama Apple di berbagai kategori produk:\n\n1. **Smartphone:**\n - **Samsung:** Merupakan salah satu pesaing terbesar Apple di pasar smartphone dengan seri Galaxy-nya.\n - **Google:** Dengan lini produk Pixel.\n - **Huawei:** Sebuah pemain besar di pasar global, meskipun mengalami beberapa hambatan di pasar tertentu.\n\n2. **Komputer dan Laptop:**\n - **Microsoft:** Dengan produk Surface dan sistem operasi Windows.\n - **Dell, HP, Lenovo:** Ketiga perusahaan ini menawarkan berbagai model laptop dan desktop yang bersaing dengan MacBook dan iMac.\n\n3. **Tablet:**\n - **Samsung:** Dengan seri Galaxy Tab.\n - **Microsoft:** Dengan Surface Pro dan Surface Go.\n - **Amazon:** Dengan seri Fire Tablet.\n\n4. **Wearable Devices:**\n - **Fitbit:** Menawarkan berbagai perangkat kebugaran yang bersaing dengan Apple Watch.\n - **Samsung:** Dengan Galaxy Watch.\n - **Garmin:** Terkenal dengan produk jam tangan kebugaran dan GPS.\n\n5. **Streaming Layanan dan Konten:**\n - **Netflix, Amazon Prime Video, Disney+:** Bersaing dengan Apple TV+ dalam hal layanan streaming konten.\n - **Spotify:** Merupakan pesaing utama Apple Music dalam layanan streaming musik.\n\n6. **Smart Home Devices:**\n - **Google:** Dengan produk Nest dan Google Home.\n - **Amazon:** Dengan produk Echo dan Alexa.\n\n7. **Software dan Layanan:**\n - **Microsoft:** Dengan layanan Office 365 yang bersaing dengan Apple iWork.\n - **Google:** Dengan Google Workspace.\n \nSetiap segmen bisnis Apple memiliki pesaing khusus yang kuat, dan persaingan ini terus mendorong inovasi dan perkembangan di industri teknologi.', 'additional_kwargs': {'refusal': None}, 'response_metadata': {'token_usage': {'completion_tokens': 398, 'prompt_tokens': 13, 'total_tokens': 411}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_157b3831f5', 'finish_reason': 'stop', 'logprobs': None}, 'type': 'ai', 'name': None, 'id': 'run-8018e637-be23-468d-b6eb-76ae97c883f3-0', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 13, 'output_tokens': 398, 'total_tokens': 411}}