Halaman ini menunjukkan cara mengembangkan aplikasi menggunakan template
LangGraph khusus framework (class LanggraphAgent
di Vertex AI SDK untuk Python).
Aplikasi menampilkan nilai tukar antara dua mata uang pada tanggal yang ditentukan.
Saat membuat agen, Anda memiliki beberapa opsi:
- Membuat class Python kustom (lihat Menyesuaikan template aplikasi)
- Kembangkan aplikasi LangChain dalam Vertex AI SDK untuk Python (lihat Mengembangkan aplikasi LangChain).
- Mengembangkan aplikasi LangGraph dalam Vertex AI SDK untuk Python (dokumen saat ini).
Langkah-langkah berikut menunjukkan cara membuat aplikasi ini menggunakan
template bawaan LanggraphAgent
:
- Menentukan dan mengonfigurasi model
- Menentukan dan menggunakan alat
- (Opsional) Simpan titik pemeriksaan
- (Opsional) Menyesuaikan template perintah
- (Opsional) Menyesuaikan orkestrasi
Sebelum memulai
Pastikan lingkungan Anda sudah disiapkan dengan mengikuti langkah-langkah di Menyiapkan lingkungan.
Langkah 1. Menentukan dan mengonfigurasi model
Tentukan Versi model yang akan digunakan.
model = "gemini-1.5-flash-001"
(Opsional) Konfigurasikan setelan keamanan model. Untuk mempelajari lebih lanjut opsi yang tersedia untuk setelan keamanan di Gemini, lihat Mengonfigurasi atribut keamanan. Berikut adalah contoh cara mengonfigurasi setelan keamanan:
from langchain_google_vertexai import HarmBlockThreshold, HarmCategory
safety_settings = {
HarmCategory.HARM_CATEGORY_UNSPECIFIED: HarmBlockThreshold.BLOCK_NONE,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
}
(Opsional) Tentukan parameter model dengan cara berikut:
model_kwargs = {
# temperature (float): The sampling temperature controls the degree of
# randomness in token selection.
"temperature": 0.28,
# max_output_tokens (int): The token limit determines the maximum amount of
# text output from one prompt.
"max_output_tokens": 1000,
# top_p (float): Tokens are selected from most probable to least until
# the sum of their probabilities equals the top-p value.
"top_p": 0.95,
# top_k (int): The next token is selected from among the top-k most
# probable tokens. This is not supported by all model versions. See
# https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/image-understanding#valid_parameter_values
# for details.
"top_k": None,
# safety_settings (Dict[HarmCategory, HarmBlockThreshold]): The safety
# settings to use for generating content.
# (you must create your safety settings using the previous step first).
"safety_settings": safety_settings,
}
Buat LanggraphAgent
menggunakan konfigurasi model:
agent = reasoning_engines.LanggraphAgent(
model=model, # Required.
model_kwargs=model_kwargs, # Optional.
)
Jika Anda menjalankan di lingkungan interaktif (misalnya, terminal atau notebook Colab), Anda dapat menjalankan kueri sebagai langkah pengujian perantara:
response = agent.query(input={"messages": [
("user", "What is the exchange rate from US dollars to Swedish currency?"),
]})
print(response)
Responsnya adalah kamus Python yang mirip dengan contoh berikut:
{
'messages': [{
'id': ['langchain', 'schema', 'messages', 'HumanMessage'],
'kwargs': {
'content': 'What is the exchange rate from US dollars to Swedish currency?',
'id': '5473dd25-d796-42ad-a690-45bc49a64bec',
'type': 'human',
},
'lc': 1,
'type': 'constructor',
}, {
'id': ['langchain', 'schema', 'messages', 'AIMessage'],
'kwargs': {
'content': """
I do not have access to real-time information, including currency exchange rates.
To get the most up-to-date exchange rate from US dollars to Swedish currency (SEK),
I recommend checking a reliable online currency converter like: ...
These websites will provide you with the current exchange rate and allow you to
convert specific amounts.""",
'id': 'run-c42f9940-8ba8-42f1-a625-3aa0780c9e87-0',
...
'usage_metadata': {
'input_tokens': 12,
'output_tokens': 145,
'total_tokens': 157,
},
},
'lc': 1,
'type': 'constructor',
}],
}
(Opsional) Penyesuaian lanjutan
Template LanggraphAgent
menggunakan ChatVertexAI
secara default, karena template ini memberikan akses ke semua
model dasar yang tersedia di Google Cloud. Untuk menggunakan model yang tidak
tersedia melalui ChatVertexAI
, Anda dapat menentukan argumen model_builder=
,
dengan fungsi Python dari tanda tangan berikut:
from typing import Optional
def model_builder(
*,
model_name: str, # Required. The name of the model
model_kwargs: Optional[dict] = None, # Optional. The model keyword arguments.
**kwargs, # Optional. The remaining keyword arguments to be ignored.
):
Untuk mengetahui daftar model chat yang didukung di LangChain dan kemampuannya, lihat
Model Chat.
Kumpulan nilai yang didukung untuk model=
dan model_kwargs=
bersifat khusus untuk
setiap model chat, sehingga Anda harus melihat dokumentasi yang sesuai untuk mengetahui
detailnya.
ChatVertexAI
Diinstal secara default.
Ini digunakan dalam template LanggraphAgent
saat Anda menghilangkan argumen
model_builder
, misalnya
agent = reasoning_engines.LanggraphAgent(
model=model, # Required.
model_kwargs=model_kwargs, # Optional.
)
ChatAnthropic
Pertama, ikuti dokumentasi mereka untuk menyiapkan akun dan menginstal paket.
Selanjutnya, tentukan model_builder
yang menampilkan ChatAnthropic
:
def model_builder(*, model_name: str, model_kwargs = None, **kwargs):
from langchain_anthropic import ChatAnthropic
return ChatAnthropic(model_name=model_name, **model_kwargs)
Terakhir, gunakan di template LanggraphAgent
dengan kode berikut:
agent = reasoning_engines.LanggraphAgent(
model="claude-3-opus-20240229", # Required.
model_builder=model_builder, # Required.
model_kwargs={
"api_key": "ANTHROPIC_API_KEY", # Required.
"temperature": 0.28, # Optional.
"max_tokens": 1000, # Optional.
},
)
ChatOpenAI
Anda dapat menggunakan ChatOpenAI
bersama dengan ChatCompletions API Gemini.
Pertama, ikuti dokumentasi mereka untuk menginstal paket.
Selanjutnya, tentukan model_builder
yang menampilkan ChatOpenAI
:
def model_builder(
*,
model_name: str,
model_kwargs = None,
project: str, # Specified via vertexai.init
location: str, # Specified via vertexai.init
**kwargs,
):
import google.auth
from langchain_openai import ChatOpenAI
# Note: the credential lives for 1 hour by default.
# After expiration, it must be refreshed.
creds, _ = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
if model_kwargs is None:
model_kwargs = {}
endpoint = f"https://{location}-aiplatform.googleapis.com"
base_url = f'{endpoint}/v1beta1/projects/{project}/locations/{location}/endpoints/openapi'
return ChatOpenAI(
model=model_name,
base_url=base_url,
api_key=creds.token,
**model_kwargs,
)
Terakhir, gunakan di template LanggraphAgent
dengan kode berikut:
agent = reasoning_engines.LanggraphAgent(
model="google/gemini-1.5-pro-001", # Or "meta/llama3-405b-instruct-maas"
model_builder=model_builder, # Required.
model_kwargs={
"temperature": 0, # Optional.
"max_retries": 2, # Optional.
},
)
Langkah 2. Menentukan dan menggunakan alat
Setelah menentukan model, langkah berikutnya adalah menentukan alat yang digunakan model untuk penalaran. Alat dapat berupa alat LangChain atau fungsi Python. Anda juga dapat mengonversi fungsi Python yang ditentukan menjadi Alat LangChain.
Saat menentukan fungsi, Anda harus menyertakan komentar yang sepenuhnya dan jelas menjelaskan parameter fungsi, fungsi yang dilakukan, dan yang ditampilkan fungsi. Informasi ini digunakan oleh model untuk menentukan fungsi mana yang akan digunakan. Anda juga harus menguji fungsi secara lokal untuk mengonfirmasi bahwa fungsi tersebut berfungsi.
Gunakan kode berikut untuk menentukan fungsi yang menampilkan nilai tukar:
def get_exchange_rate(
currency_from: str = "USD",
currency_to: str = "EUR",
currency_date: str = "latest",
):
"""Retrieves the exchange rate between two currencies on a specified date.
Uses the Frankfurter API (https://api.frankfurter.app/) to obtain
exchange rate data.
Args:
currency_from: The base currency (3-letter currency code).
Defaults to "USD" (US Dollar).
currency_to: The target currency (3-letter currency code).
Defaults to "EUR" (Euro).
currency_date: The date for which to retrieve the exchange rate.
Defaults to "latest" for the most recent exchange rate data.
Can be specified in YYYY-MM-DD format for historical rates.
Returns:
dict: A dictionary containing the exchange rate information.
Example: {"amount": 1.0, "base": "USD", "date": "2023-11-24",
"rates": {"EUR": 0.95534}}
"""
import requests
response = requests.get(
f"https://api.frankfurter.app/{currency_date}",
params={"from": currency_from, "to": currency_to},
)
return response.json()
Untuk menguji fungsi sebelum menggunakannya di aplikasi, jalankan hal berikut:
get_exchange_rate(currency_from="USD", currency_to="SEK")
Responsnya akan mirip dengan berikut ini:
{'amount': 1.0, 'base': 'USD', 'date': '2024-02-22', 'rates': {'SEK': 10.3043}}
Untuk menggunakan alat di dalam template LanggraphAgent
, Anda akan menambahkannya ke
daftar alat di bagian argumen tools=
:
agent = reasoning_engines.LanggraphAgent(
model=model, # Required.
tools=[get_exchange_rate], # Optional.
model_kwargs=model_kwargs, # Optional.
)
Anda dapat menguji aplikasi secara lokal dengan menjalankan kueri pengujian terhadapnya. Jalankan perintah berikut untuk menguji aplikasi secara lokal menggunakan dolar AS dan Krona Swedia:
response = agent.query(input={"messages": [
("user", "What is the exchange rate from US dollars to Swedish currency?"),
]})
Responsnya adalah kamus yang mirip dengan berikut ini:
{"input": "What is the exchange rate from US dollars to Swedish currency?",
"output": "For 1 US dollar you will get 10.7345 Swedish Krona."}
(Opsional) Beberapa alat
Alat untuk LanggraphAgent
dapat ditentukan dan dibuat instance-nya dengan cara lain.
Alat Grounding
Pertama, impor paket generate_models
dan buat alat
from vertexai.generative_models import grounding, Tool
grounded_search_tool = Tool.from_google_search_retrieval(
grounding.GoogleSearchRetrieval()
)
Selanjutnya, gunakan alat di dalam template LanggraphAgent
:
agent = reasoning_engines.LanggraphAgent(
model=model,
tools=[grounded_search_tool],
)
agent.query(input={"messages": [
("user", "When is the next total solar eclipse in US?"),
]})
Responsnya adalah kamus yang mirip dengan berikut ini:
{"input": "When is the next total solar eclipse in US?",
"output": """The next total solar eclipse in the U.S. will be on August 23, 2044.
This eclipse will be visible from three states: Montana, North Dakota, and
South Dakota. The path of totality will begin in Greenland, travel through
Canada, and end around sunset in the United States."""}
Untuk mengetahui detailnya, buka Pembumian.
Alat LangChain
Pertama, instal paket yang menentukan alat.
pip install langchain-google-community
Selanjutnya, impor paket dan buat alat.
from langchain_google_community import VertexAISearchRetriever
from langchain.tools.retriever import create_retriever_tool
retriever = VertexAISearchRetriever(
project_id="PROJECT_ID",
data_store_id="DATA_STORE_ID",
location_id="DATA_STORE_LOCATION_ID",
engine_data_type=1,
max_documents=10,
)
movie_search_tool = create_retriever_tool(
retriever=retriever,
name="search_movies",
description="Searches information about movies.",
)
Terakhir, gunakan alat di dalam template LanggraphAgent
:
agent = reasoning_engines.LanggraphAgent(
model=model,
tools=[movie_search_tool],
)
response = agent.query(input={"messages": [
("user", "List some sci-fi movies from the 1990s"),
]})
print(response)
Tindakan ini akan menampilkan respons seperti
{"input": "List some sci-fi movies from the 1990s",
"output": """Here are some sci-fi movies from the 1990s:
* The Matrix (1999): A computer hacker learns from mysterious rebels about the true nature of his reality and his role in the war against its controllers.
* Star Wars: Episode I - The Phantom Menace (1999): Two Jedi Knights escape a hostile blockade to find a queen and her protector, and come across a young boy [...]
* Men in Black (1997): A police officer joins a secret organization that monitors extraterrestrial interactions on Earth.
[...]
"""}
Untuk melihat contoh lengkapnya, buka notebook.
Untuk mengetahui contoh alat lainnya yang tersedia di LangChain, buka Alat Google.
Ekstensi Vertex AI
Pertama, impor paket ekstensi dan buat alat
from typing import Optional
def generate_and_execute_code(
query: str,
files: Optional[list[str]] = None,
file_gcs_uris: Optional[list[str]] = None,
) -> str:
"""Get the results of a natural language query by generating and executing
a code snippet.
Example queries: "Find the max in [1, 2, 5]" or "Plot average sales by
year (from data.csv)". Only one of `file_gcs_uris` and `files` field
should be provided.
Args:
query:
The natural language query to generate and execute.
file_gcs_uris:
Optional. URIs of input files to use when executing the code
snippet. For example, ["gs://input-bucket/data.csv"].
files:
Optional. Input files to use when executing the generated code.
If specified, the file contents are expected be base64-encoded.
For example: [{"name": "data.csv", "contents": "aXRlbTEsaXRlbTI="}].
Returns:
The results of the query.
"""
operation_params = {"query": query}
if files:
operation_params["files"] = files
if file_gcs_uris:
operation_params["file_gcs_uris"] = file_gcs_uris
from vertexai.preview import extensions
# If you have an existing extension instance, you can get it here
# i.e. code_interpreter = extensions.Extension(resource_name).
code_interpreter = extensions.Extension.from_hub("code_interpreter")
return extensions.Extension.from_hub("code_interpreter").execute(
operation_id="generate_and_execute",
operation_params=operation_params,
)
Selanjutnya, gunakan alat di dalam template LanggraphAgent
:
agent = reasoning_engines.LanggraphAgent(
model=model,
tools=[generate_and_execute_code],
)
response = agent.query(input={"messages": [("user", """
Using the data below, construct a bar chart that includes only the height values with different colors for the bars:
tree_heights_prices = {
\"Pine\": {\"height\": 100, \"price\": 100},
\"Oak\": {\"height\": 65, \"price\": 135},
\"Birch\": {\"height\": 45, \"price\": 80},
\"Redwood\": {\"height\": 200, \"price\": 200},
\"Fir\": {\"height\": 180, \"price\": 162},
}
""")]})
print(response)
Tindakan ini akan menampilkan respons seperti
{"input": """Using the data below, construct a bar chart that includes only the height values with different colors for the bars:
tree_heights_prices = {
\"Pine\": {\"height\": 100, \"price\": 100},
\"Oak\": {\"height\": 65, \"price\": 135},
\"Birch\": {\"height\": 45, \"price\": 80},
\"Redwood\": {\"height\": 200, \"price\": 200},
\"Fir\": {\"height\": 180, \"price\": 162},
}
""",
"output": """Here's the generated bar chart:
```python
import matplotlib.pyplot as plt
tree_heights_prices = {
"Pine": {"height": 100, "price": 100},
"Oak": {"height": 65, "price": 135},
"Birch": {"height": 45, "price": 80},
"Redwood": {"height": 200, "price": 200},
"Fir": {"height": 180, "price": 162},
}
heights = [tree["height"] for tree in tree_heights_prices.values()]
names = list(tree_heights_prices.keys())
plt.bar(names, heights, color=['red', 'green', 'blue', 'purple', 'orange'])
plt.xlabel('Tree Species')
plt.ylabel('Height')
plt.title('Tree Heights')
plt.show()
```
"""}
Untuk mengetahui detailnya, buka Vertex AI Extensions.
Anda dapat menggunakan semua (atau sebagian) alat yang telah Anda buat di LanggraphAgent
:
agent = reasoning_engines.LanggraphAgent(
model=model,
tools=[
get_exchange_rate, # Optional (Python function)
grounded_search_tool, # Optional (Grounding Tool)
movie_search_tool, # Optional (Langchain Tool)
generate_and_execute_code, # Optional (Vertex Extension)
],
)
response = agent.query(input={"messages": [
("user", "List some sci-fi movies from the 1990s"),
]})
print(response)
(Opsional) Konfigurasi alat
Dengan Gemini, Anda dapat membatasi penggunaan alat. Misalnya, bukan mengizinkan model untuk menghasilkan respons bahasa alami, Anda dapat memaksanya untuk hanya menghasilkan panggilan fungsi ("panggilan fungsi paksa").
from vertexai.preview.generative_models import ToolConfig
agent = reasoning_engines.LanggraphAgent(
model="gemini-1.5-pro",
tools=[search_arxiv, get_exchange_rate],
model_tool_kwargs={
"tool_config": { # Specify the tool configuration here.
"function_calling_config": {
"mode": ToolConfig.FunctionCallingConfig.Mode.ANY,
"allowed_function_names": ["search_arxiv", "get_exchange_rate"],
},
},
},
)
response = agent.query(input={"messages": [
("user", "Explain the Schrodinger equation in a few sentences"),
]})
print(response)
Untuk mengetahui detailnya, buka Konfigurasi Alat.
Langkah 3. Menyimpan checkpoint
Untuk melacak pesan chat dan menambahkannya ke database, tentukan fungsi checkpointer_builder
dan teruskan saat Anda membuat aplikasi.
Menyiapkan database
Pertama, instal dan gunakan paket yang relevan untuk menyiapkan database pilihan Anda (misalnya, Firestore, atau Spanner):
Selanjutnya, tentukan fungsi checkpointer_builder
sebagai berikut:
Spanner
checkpointer_kwargs = {
"instance_id": "INSTANCE_ID",
"database_id": "DATABASE_ID",
"project_id": "PROJECT_ID",
}
def checkpointer_builder(**kwargs):
from langchain_google_spanner import SpannerCheckpointSaver
checkpointer = SpannerCheckpointSaver(**kwargs)
checkpointer.setup()
return checkpointer
Terakhir, buat aplikasi dan teruskan sebagai checkpointer_builder
:
agent = reasoning_engines.LanggraphAgent(
model=model,
checkpointer_kwargs=checkpointer_kwargs, # <- new
checkpointer_builder=checkpointer_builder, # <- new
)
Saat membuat kueri aplikasi, pastikan Anda menentukan thread_id
sehingga aplikasi
memiliki "memori" pertanyaan dan jawaban sebelumnya:
response = agent.query(
input={"messages": [
("user", "What is the exchange rate from US dollars to Swedish currency?")
]},
config={"configurable": {"thread_id": "THREAD_ID"}},
)
print(response)
Anda dapat memeriksa apakah kueri berikutnya akan mempertahankan memori sesi:
response = agent.query(
input={"messages": [("user", "How much is 100 USD?")]},
config={"configurable": {"thread_id": "THREAD_ID"}},
)
print(response)
Langkah 4. Menyesuaikan template dialog
Template perintah membantu menerjemahkan input pengguna menjadi petunjuk untuk model, dan digunakan untuk memandu respons model, membantunya memahami konteks dan menghasilkan output berbasis bahasa yang relevan dan koheren. Untuk mengetahui detailnya, buka ChatPromptTemplates.
Template perintah default diatur secara berurutan ke dalam beberapa bagian.
Bagian | Deskripsi |
---|---|
(Opsional) Petunjuk sistem | Petunjuk untuk agen yang akan diterapkan di semua kueri. |
(Opsional) Histori chat | Pesan yang sesuai dengan histori chat dari sesi sebelumnya. |
Input pengguna | Kueri dari pengguna yang akan direspons oleh agen. |
Scratchpad Agen | Pesan yang dibuat oleh agen (misalnya, dengan panggilan fungsi) saat melakukan penggunaan alat dan melakukan penalaran untuk merumuskan respons kepada pengguna. |
Template perintah default dibuat jika Anda membuat aplikasi tanpa menentukan template perintah Anda sendiri, dan akan terlihat seperti berikut secara lengkap:
from langchain_core.prompts import ChatPromptTemplate
from langchain.agents.format_scratchpad.tools import format_to_tool_messages
prompt_template = {
"user_input": lambda x: x["input"],
"history": lambda x: x["history"],
"agent_scratchpad": lambda x: format_to_tool_messages(x["intermediate_steps"]),
} | ChatPromptTemplate.from_messages([
("system", "{system_instruction}"),
("placeholder", "{history}"),
("user", "{user_input}"),
("placeholder", "{agent_scratchpad}"),
])
Anda secara implisit menggunakan template perintah lengkap saat membuat instance aplikasi dalam contoh berikut:
system_instruction = "I help look up the rate between currencies"
agent = reasoning_engines.LanggraphAgent(
model=model,
system_instruction=system_instruction,
checkpointer_kwargs=checkpointer_kwargs,
checkpointer_builder=checkpointer_builder,
tools=[get_exchange_rate],
)
Anda dapat mengganti template perintah default dengan template perintah Anda sendiri, dan menggunakannya saat membuat aplikasi, misalnya:
custom_prompt_template = {
"user_input": lambda x: x["input"],
"history": lambda x: x["history"],
"agent_scratchpad": lambda x: format_to_tool_messages(x["intermediate_steps"]),
} | ChatPromptTemplate.from_messages([
("placeholder", "{history}"),
("user", "{user_input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = reasoning_engines.LanggraphAgent(
model=model,
prompt=custom_prompt_template,
checkpointer_kwargs=checkpointer_kwargs,
checkpointer_builder=checkpointer_builder,
tools=[get_exchange_rate],
)
response = agent.query(
input={"messages": [
("user", "What is the exchange rate from US dollars to Swedish currency?"),
]}
config={"configurable": {"thread_id": "THREAD_ID"}},
)
print(response)
Langkah 5. Menyesuaikan orkestrasi
Semua komponen LangChain mengimplementasikan antarmuka Runnable,
yang menyediakan skema input dan output untuk orkestrasi. LanggraphAgent
memerlukan runnable yang akan di-build agar dapat merespons kueri. Secara default,
LanggraphAgent
akan mem-build aplikasi yang dapat dijalankan tersebut menggunakan implementasi aplikasi
react bawaan dari langgraph.
Anda mungkin ingin menyesuaikan orkestrasi jika ingin (i) menerapkan
aplikasi yang melakukan serangkaian langkah deterministik (bukan untuk melakukan
pemikiran terbuka), atau (ii) meminta Aplikasi dengan cara seperti ReAct untuk
menambahkan anotasi pada setiap langkah dengan pemikiran tentang alasan aplikasi melakukan langkah tersebut. Untuk melakukannya, Anda harus mengganti runnable default saat membuat LanggraphAgent
dengan menentukan argumen runnable_builder=
dengan fungsi Python dari tanda tangan berikut:
from typing import Optional
from langchain_core.language_models import BaseLanguageModel
def runnable_builder(
model: BaseLanguageModel,
*,
system_instruction: Optional[str] = None,
prompt: Optional["RunnableSerializable"] = None,
tools: Optional[Sequence["_ToolLike"]] = None,
checkpointer: Optional[Any] = None,
runnable_kwargs: Optional[Mapping[str, Any]] = None,
**kwargs,
):
di mana
model
sesuai dengan model chat yang ditampilkan darimodel_builder
(lihat Menentukan dan mengonfigurasi model),tools
sesuai dengan alat dan konfigurasi yang akan digunakan (lihat Menentukan dan menggunakan alat),checkpointer
sesuai dengan database untuk menyimpan checkpoint (lihat Menyimpan checkpoint),system_instruction
danprompt
sesuai dengan konfigurasi perintah (lihat Menyesuaikan template perintah),runnable_kwargs
adalah argumen kata kunci yang dapat Anda gunakan untuk menyesuaikan yang dapat dijalankan untuk dibuat.
Hal ini memberikan opsi yang berbeda untuk menyesuaikan logika orkestrasi.
ChatModel
Dalam kasus yang paling sederhana, untuk membuat aplikasi tanpa orkestrasi, Anda dapat
mengganti runnable_builder
untuk LanggraphAgent
guna menampilkan model
secara langsung.
from langchain_core.language_models import BaseLanguageModel
def llm_builder(model: BaseLanguageModel, **kwargs):
return model
agent = reasoning_engines.LanggraphAgent(
model=model,
runnable_builder=llm_builder,
)
ReAct
Untuk mengganti perilaku pemanggilan alat default dengan aplikasi ReAct Anda sendiri berdasarkan
prompt
Anda sendiri (lihat Menyesuaikan Template Perintah),
Anda perlu mengganti runnable_builder
untuk LanggraphAgent
.
from typing import Sequence
from langchain_core.language_models import BaseLanguageModel
from langchain_core.prompts import BasePromptTemplate
from langchain_core.tools import BaseTool
from langchain import hub
def react_builder(
model: BaseLanguageModel,
*,
tools: Sequence[BaseTool],
prompt: BasePromptTemplate,
agent_executor_kwargs = None,
**kwargs,
):
from langchain.agents.react.agent import create_react_agent
from langchain.agents import AgentExecutor
agent = create_react_agent(model, tools, prompt)
return AgentExecutor(agent=agent, tools=tools, **agent_executor_kwargs)
agent = reasoning_engines.LanggraphAgent(
model=model,
tools=[get_exchange_rate],
prompt=hub.pull("hwchase17/react"),
agent_executor_kwargs={"verbose": True}, # Optional. For illustration.
runnable_builder=react_builder,
)
Sintaksis LCEL
Untuk membuat grafik berikut menggunakan LangChain Expression Language (LCEL),
Input
/ \
Pros Cons
\ /
Summary
Anda perlu mengganti runnable_builder
untuk LanggraphAgent
:
def lcel_builder(*, model, **kwargs):
from operator import itemgetter
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()
planner = ChatPromptTemplate.from_template(
"Generate an argument about: {input}"
) | model | output_parser | {"argument": RunnablePassthrough()}
pros = ChatPromptTemplate.from_template(
"List the positive aspects of {argument}"
) | model | output_parser
cons = ChatPromptTemplate.from_template(
"List the negative aspects of {argument}"
) | model | output_parser
final_responder = ChatPromptTemplate.from_template(
"Argument:{argument}\nPros:\n{pros}\n\nCons:\n{cons}\n"
"Generate a final response given the critique",
) | model | output_parser
return planner | {
"pros": pros,
"cons": cons,
"argument": itemgetter("argument"),
} | final_responder
agent = reasoning_engines.LanggraphAgent(
model=model,
runnable_builder=lcel_builder,
)
LangGraph
Untuk membuat grafik berikut menggunakan LangGraph,
Input
/ \
Pros Cons
\ /
Summary
Anda perlu mengganti runnable_builder
untuk LanggraphAgent
:
def langgraph_builder(*, model, **kwargs):
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langgraph.graph import END, MessageGraph
output_parser = StrOutputParser()
planner = ChatPromptTemplate.from_template(
"Generate an argument about: {input}"
) | model | output_parser
pros = ChatPromptTemplate.from_template(
"List the positive aspects of {input}"
) | model | output_parser
cons = ChatPromptTemplate.from_template(
"List the negative aspects of {input}"
) | model | output_parser
summary = ChatPromptTemplate.from_template(
"Input:{input}\nGenerate a final response given the critique",
) | model | output_parser
builder = MessageGraph()
builder.add_node("planner", planner)
builder.add_node("pros", pros)
builder.add_node("cons", cons)
builder.add_node("summary", summary)
builder.add_edge("planner", "pros")
builder.add_edge("planner", "cons")
builder.add_edge("pros", "summary")
builder.add_edge("cons", "summary")
builder.add_edge("summary", END)
builder.set_entry_point("planner")
return builder.compile()
agent = reasoning_engines.LanggraphAgent(
model=model,
runnable_builder=langgraph_builder,
)
# Example query
response = agent.query(input={"role": "user", "content": "scrum methodology"})
print(response)