forked from Archives/langchain
d3ec00b566
Co-authored-by: Nuno Campos <nuno@boringbits.io> Co-authored-by: Davis Chase <130488702+dev2049@users.noreply.github.com> Co-authored-by: Zander Chase <130414180+vowelparrot@users.noreply.github.com> Co-authored-by: Harrison Chase <hw.chase.17@gmail.com>
357 lines
11 KiB
Plaintext
357 lines
11 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "5371a9bb",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Tracing Walkthrough\n",
|
|
"\n",
|
|
"There are two recommended ways to trace your LangChains:\n",
|
|
"\n",
|
|
"1. Setting the `LANGCHAIN_TRACING` environment variable to \"true\".\n",
|
|
"1. Using a context manager with tracing_enabled() to trace a particular block of code.\n",
|
|
"\n",
|
|
"**Note** if the environment variable is set, all code will be traced, regardless of whether or not it's within the context manager."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "17c04cc6-c93d-4b6c-a033-e897577f4ed1",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"os.environ[\"LANGCHAIN_TRACING\"] = \"true\"\n",
|
|
"\n",
|
|
"## Uncomment below if using hosted setup.\n",
|
|
"# os.environ[\"LANGCHAIN_ENDPOINT\"] = \"https://langchain-api-gateway-57eoxz8z.uc.gateway.dev\" \n",
|
|
"\n",
|
|
"## Uncomment below if you want traces to be recorded to \"my_session\" instead of \"default\".\n",
|
|
"# os.environ[\"LANGCHAIN_SESSION\"] = \"my_session\" \n",
|
|
"\n",
|
|
"## Better to set this environment variable in the terminal\n",
|
|
"## Uncomment below if using hosted version. Replace \"my_api_key\" with your actual API Key.\n",
|
|
"# os.environ[\"LANGCHAIN_API_KEY\"] = \"my_api_key\" \n",
|
|
"\n",
|
|
"import langchain\n",
|
|
"from langchain.agents import Tool, initialize_agent, load_tools\n",
|
|
"from langchain.agents import AgentType\n",
|
|
"from langchain.callbacks import tracing_enabled\n",
|
|
"from langchain.chat_models import ChatOpenAI\n",
|
|
"from langchain.llms import OpenAI"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "1b62cd48",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Agent run with tracing. Ensure that OPENAI_API_KEY is set appropriately to run this example.\n",
|
|
"\n",
|
|
"llm = OpenAI(temperature=0)\n",
|
|
"tools = load_tools([\"llm-math\"], llm=llm)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "bfa16b79-aa4b-4d41-a067-70d1f593f667",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\u001b[32;1m\u001b[1;3m I need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 2^.123243\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.0891804557407723\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer.\n",
|
|
"Final Answer: 1.0891804557407723\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'1.0891804557407723'"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"agent = initialize_agent(\n",
|
|
" tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n",
|
|
")\n",
|
|
"\n",
|
|
"agent.run(\"What is 2 raised to .123243 power?\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "4829eb1d",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\u001b[32;1m\u001b[1;3mI need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 2 ^ .123243\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.0891804557407723\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3mI now know the answer to the question. \n",
|
|
"Final Answer: 1.0891804557407723\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'1.0891804557407723'"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Agent run with tracing using a chat model\n",
|
|
"agent = initialize_agent(\n",
|
|
" tools, ChatOpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n",
|
|
")\n",
|
|
"\n",
|
|
"agent.run(\"What is 2 raised to .123243 power?\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "76abfd82",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\u001b[32;1m\u001b[1;3mI need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 2 ^ .123243\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.0891804557407723\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3mI now know the answer to the question. \n",
|
|
"Final Answer: 1.0891804557407723\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n",
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\u001b[32;1m\u001b[1;3mI need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 5 ^ .123243\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.2193914912400514\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3mI now know the answer to the question. \n",
|
|
"Final Answer: 1.2193914912400514\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Both of the agent runs will be traced because the environment variable is set\n",
|
|
"agent.run(\"What is 2 raised to .123243 power?\")\n",
|
|
"with tracing_enabled() as session:\n",
|
|
" agent.run(\"What is 5 raised to .123243 power?\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "fe833c33-033f-4806-be0c-cc3d147db13d",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\u001b[32;1m\u001b[1;3mI need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 5 ^ .123243\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.2193914912400514\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3mI now know the answer to the question. \n",
|
|
"Final Answer: 1.2193914912400514\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n",
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\u001b[32;1m\u001b[1;3mI need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 2 ^ .123243\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.0891804557407723\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3mI now know the answer to the question. \n",
|
|
"Final Answer: 1.0891804557407723\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'1.0891804557407723'"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Now, we unset the environment variable and use a context manager.\n",
|
|
"if \"LANGCHAIN_TRACING\" in os.environ:\n",
|
|
" del os.environ[\"LANGCHAIN_TRACING\"]\n",
|
|
"\n",
|
|
"# here, we are writing traces to \"my_test_session\"\n",
|
|
"with tracing_enabled(\"my_session\") as session:\n",
|
|
" assert session\n",
|
|
" agent.run(\"What is 5 raised to .123243 power?\") # this should be traced\n",
|
|
"\n",
|
|
"agent.run(\"What is 2 raised to .123243 power?\") # this should not be traced"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"id": "b34105a4-be8e-46e4-8abe-01adba3ba727",
|
|
"metadata": {
|
|
"tags": []
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[32;1m\u001b[1;3mI need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 3^0.123\u001b[0m\u001b[32;1m\u001b[1;3mI need to use a calculator to solve this.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 2^0.123\u001b[0m\u001b[32;1m\u001b[1;3mAny number raised to the power of 0 is 1, but I'm not sure about a decimal power.\n",
|
|
"Action: Calculator\n",
|
|
"Action Input: 1^.123\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.1446847956963533\u001b[0m\n",
|
|
"Thought:\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.0889970153361064\u001b[0m\n",
|
|
"Thought:\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAnswer: 1.0\u001b[0m\n",
|
|
"Thought:\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Finished chain.\u001b[0m\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'1.0'"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# The context manager is concurrency safe:\n",
|
|
"import asyncio \n",
|
|
"if \"LANGCHAIN_TRACING\" in os.environ:\n",
|
|
" del os.environ[\"LANGCHAIN_TRACING\"]\n",
|
|
" \n",
|
|
"questions = [f\"What is {i} raised to .123 power?\" for i in range(1,4)]\n",
|
|
"\n",
|
|
"# start a background task\n",
|
|
"task = asyncio.create_task(agent.arun(questions[0])) # this should not be traced\n",
|
|
"with tracing_enabled() as session:\n",
|
|
" assert session\n",
|
|
" tasks = [agent.arun(q) for q in questions[1:3]] # these should be traced\n",
|
|
" await asyncio.gather(*tasks)\n",
|
|
"\n",
|
|
"await task"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "4e46c85b-2ac0-4661-abed-9c2bf3036820",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"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.10.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|