mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-25 17:12:26 +02:00
202 lines
5.6 KiB
Plaintext
202 lines
5.6 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "992c4695-ec4f-428d-bd05-fb3b5fbd70f4",
|
|
"metadata": {},
|
|
"source": [
|
|
"# How to add a custom system prompt to the prebuilt ReAct agent\n",
|
|
"\n",
|
|
"This tutorial will show how to add a custom system prompt to the prebuilt ReAct agent. Please see [this tutorial](./create-react-agent.ipynb) for how to get started with the prebuilt ReAct agent\n",
|
|
"\n",
|
|
"You can add a custom system prompt by passing a string to the `state_modifier` param."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "7be3889f-3c17-4fa1-bd2b-84114a2c7247",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Setup\n",
|
|
"\n",
|
|
"First, let's install the required packages and set our API keys"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "a213e11a-5c62-4ddb-a707-490d91add383",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%%capture --no-stderr\n",
|
|
"%pip install -U langgraph langchain-openai"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "23a1885c-04ab-4750-aefa-105891fddf3e",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import getpass\n",
|
|
"import os\n",
|
|
"\n",
|
|
"\n",
|
|
"def _set_env(var: str):\n",
|
|
" if not os.environ.get(var):\n",
|
|
" os.environ[var] = getpass.getpass(f\"{var}: \")\n",
|
|
"\n",
|
|
"\n",
|
|
"_set_env(\"OPENAI_API_KEY\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "715867c6",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div class=\"admonition tip\">\n",
|
|
" <p class=\"admonition-title\">Set up <a href=\"https://smith.langchain.com\">LangSmith</a> for LangGraph development</p>\n",
|
|
" <p style=\"padding-top: 5px;\">\n",
|
|
" Sign up for LangSmith to quickly spot issues and improve the performance of your LangGraph projects. LangSmith lets you use trace data to debug, test, and monitor your LLM apps built with LangGraph — read more about how to get started <a href=\"https://docs.smith.langchain.com\">here</a>. \n",
|
|
" </p>\n",
|
|
"</div> "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "03c0f089-070c-4cd4-87e0-6c51f2477b82",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Code"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "7a154152-973e-4b5d-aa13-48c617744a4c",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# First we initialize the model we want to use.\n",
|
|
"from langchain_openai import ChatOpenAI\n",
|
|
"\n",
|
|
"model = ChatOpenAI(model=\"gpt-4o\", temperature=0)\n",
|
|
"\n",
|
|
"\n",
|
|
"# For this tutorial we will use custom tool that returns pre-defined values for weather in two cities (NYC & SF)\n",
|
|
"\n",
|
|
"from typing import Literal\n",
|
|
"\n",
|
|
"from langchain_core.tools import tool\n",
|
|
"\n",
|
|
"\n",
|
|
"@tool\n",
|
|
"def get_weather(city: Literal[\"nyc\", \"sf\"]):\n",
|
|
" \"\"\"Use this to get weather information.\"\"\"\n",
|
|
" if city == \"nyc\":\n",
|
|
" return \"It might be cloudy in nyc\"\n",
|
|
" elif city == \"sf\":\n",
|
|
" return \"It's always sunny in sf\"\n",
|
|
" else:\n",
|
|
" raise AssertionError(\"Unknown city\")\n",
|
|
"\n",
|
|
"\n",
|
|
"tools = [get_weather]\n",
|
|
"\n",
|
|
"# We can add our system prompt here\n",
|
|
"\n",
|
|
"prompt = \"Respond in Italian\"\n",
|
|
"\n",
|
|
"# Define the graph\n",
|
|
"\n",
|
|
"from langgraph.prebuilt import create_react_agent\n",
|
|
"\n",
|
|
"graph = create_react_agent(model, tools=tools, state_modifier=prompt)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "00407425-506d-4ffd-9c86-987921d8c844",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Usage\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "16636975-5f2d-4dc7-ab8e-d0bea0830a28",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def print_stream(stream):\n",
|
|
" for s in stream:\n",
|
|
" message = s[\"messages\"][-1]\n",
|
|
" if isinstance(message, tuple):\n",
|
|
" print(message)\n",
|
|
" else:\n",
|
|
" message.pretty_print()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "9ffff6c3-a4f5-47c9-b51d-97caaee85cd6",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"================================\u001b[1m Human Message \u001b[0m=================================\n",
|
|
"\n",
|
|
"What's the weather in NYC?\n",
|
|
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
|
|
"Tool Calls:\n",
|
|
" get_weather (call_b02uzBRrIm2uciJa8zDXCDxT)\n",
|
|
" Call ID: call_b02uzBRrIm2uciJa8zDXCDxT\n",
|
|
" Args:\n",
|
|
" city: nyc\n",
|
|
"=================================\u001b[1m Tool Message \u001b[0m=================================\n",
|
|
"Name: get_weather\n",
|
|
"\n",
|
|
"It might be cloudy in nyc\n",
|
|
"==================================\u001b[1m Ai Message \u001b[0m==================================\n",
|
|
"\n",
|
|
"A New York potrebbe essere nuvoloso.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"inputs = {\"messages\": [(\"user\", \"What's the weather in NYC?\")]}\n",
|
|
"\n",
|
|
"print_stream(graph.stream(inputs, stream_mode=\"values\"))"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.1"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|