community: Add stock market tools from financialdatasets.ai (#25025)

**Description:**
In this PR, I am adding three stock market tools from
financialdatasets.ai (my API!):
- get balance sheets
- get cash flow statements
- get income statements

Twitter handle: [@virattt](https://twitter.com/virattt)

---------

Co-authored-by: Erick Friis <erick@langchain.dev>
This commit is contained in:
Virat Singh
2024-08-06 14:28:12 -04:00
committed by GitHub
parent 267855b3c1
commit 264ab96980
10 changed files with 715 additions and 0 deletions

View File

@@ -0,0 +1,313 @@
{
"cells": [
{
"cell_type": "raw",
"id": "afaf8039",
"metadata": {},
"source": [
"---\n",
"sidebar_label: financial datasets\n",
"---"
]
},
{
"cell_type": "markdown",
"source": [
"# FinancialDatasetsToolkit\n",
"\n",
"The [financial datasets](https://financialdatasets.ai/) stock market API provides REST endpoints that let you get financial data for 16,000+ tickers spanning 30+ years.\n",
"\n",
"## Setup\n",
"\n",
"To use this toolkit, you need two API keys:\n",
"\n",
"`FINANCIAL_DATASETS_API_KEY`: Get it from [financialdatasets.ai](https://financialdatasets.ai/).\n",
"`OPENAI_API_KEY`: Get it from [OpenAI](https://platform.openai.com/)."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"import getpass\n",
"import os\n",
"\n",
"os.environ[\"FINANCIAL_DATASETS_API_KEY\"] = getpass.getpass()"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"os.environ[\"OPENAI_API_KEY\"] = getpass.getpass()"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [
"### Installation\n",
"\n",
"This toolkit lives in the `langchain-community` package."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"id": "652d6238-1f87-422a-b135-f5abbb8652fc",
"metadata": {},
"outputs": [],
"source": [
"%pip install -qU langchain-community"
]
},
{
"cell_type": "markdown",
"id": "a38cde65-254d-4219-a441-068766c0d4b5",
"metadata": {},
"source": [
"## Instantiation\n",
"\n",
"Now we can instantiate our toolkit:"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cb09c344-1836-4e0c-acf8-11d13ac1dbae",
"metadata": {},
"outputs": [],
"source": [
"from langchain_community.agent_toolkits.financial_datasets.toolkit import (\n",
" FinancialDatasetsToolkit,\n",
")\n",
"from langchain_community.utilities.financial_datasets import FinancialDatasetsAPIWrapper\n",
"\n",
"api_wrapper = FinancialDatasetsAPIWrapper(\n",
" financial_datasets_api_key=os.environ[\"FINANCIAL_DATASETS_API_KEY\"]\n",
")\n",
"toolkit = FinancialDatasetsToolkit(api_wrapper=api_wrapper)"
]
},
{
"cell_type": "markdown",
"id": "5c5f2839-4020-424e-9fc9-07777eede442",
"metadata": {},
"source": [
"## Tools\n",
"\n",
"View available tools:"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "51a60dbe-9f2e-4e04-bb62-23968f17164a",
"metadata": {},
"outputs": [],
"source": [
"tools = toolkit.get_tools()"
]
},
{
"cell_type": "markdown",
"source": [
"## Use within an agent\n",
"\n",
"Let's equip our agent with the FinancialDatasetsToolkit and ask financial questions."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"system_prompt = \"\"\"\n",
"You are an advanced financial analysis AI assistant equipped with specialized tools\n",
"to access and analyze financial data. Your primary function is to help users with\n",
"financial analysis by retrieving and interpreting income statements, balance sheets,\n",
"and cash flow statements for publicly traded companies.\n",
"\n",
"You have access to the following tools from the FinancialDatasetsToolkit:\n",
"\n",
"1. Balance Sheets: Retrieves balance sheet data for a given ticker symbol.\n",
"2. Income Statements: Fetches income statement data for a specified company.\n",
"3. Cash Flow Statements: Accesses cash flow statement information for a particular ticker.\n",
"\n",
"Your capabilities include:\n",
"\n",
"1. Retrieving financial statements for any publicly traded company using its ticker symbol.\n",
"2. Analyzing financial ratios and metrics based on the data from these statements.\n",
"3. Comparing financial performance across different time periods (e.g., year-over-year or quarter-over-quarter).\n",
"4. Identifying trends in a company's financial health and performance.\n",
"5. Providing insights on a company's liquidity, solvency, profitability, and efficiency.\n",
"6. Explaining complex financial concepts in simple terms.\n",
"\n",
"When responding to queries:\n",
"\n",
"1. Always specify which financial statement(s) you're using for your analysis.\n",
"2. Provide context for the numbers you're referencing (e.g., fiscal year, quarter).\n",
"3. Explain your reasoning and calculations clearly.\n",
"4. If you need more information to provide a complete answer, ask for clarification.\n",
"5. When appropriate, suggest additional analyses that might be helpful.\n",
"\n",
"Remember, your goal is to provide accurate, insightful financial analysis to\n",
"help users make informed decisions. Always maintain a professional and objective tone in your responses.\n",
"\"\"\""
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [
"Instantiate the LLM."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"id": "310bf18e-6c9a-4072-b86e-47bc1fcca29d",
"metadata": {},
"outputs": [],
"source": [
"from langchain_core.tools import tool\n",
"from langchain_openai import ChatOpenAI\n",
"\n",
"model = ChatOpenAI(model=\"gpt-4o\")"
]
},
{
"cell_type": "markdown",
"source": [
"Define a user query."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"id": "23e11cc9-abd6-4855-a7eb-799f45ca01ae",
"metadata": {},
"outputs": [],
"source": [
"query = \"What was AAPL's revenue in 2023? What about it's total debt in Q1 2024?\""
]
},
{
"cell_type": "markdown",
"source": [
"Create the agent."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"from langchain.agents import AgentExecutor, create_tool_calling_agent\n",
"from langchain_core.prompts import ChatPromptTemplate\n",
"\n",
"prompt = ChatPromptTemplate.from_messages(\n",
" [\n",
" (\"system\", system_prompt),\n",
" (\"human\", \"{input}\"),\n",
" # Placeholders fill up a **list** of messages\n",
" (\"placeholder\", \"{agent_scratchpad}\"),\n",
" ]\n",
")\n",
"\n",
"\n",
"agent = create_tool_calling_agent(model, tools, prompt)\n",
"agent_executor = AgentExecutor(agent=agent, tools=tools)"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [
"Query the agent."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"agent_executor.invoke({\"input\": query})"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [
"## API reference\n",
"\n",
"For detailed documentation of all `FinancialDatasetsToolkit` features and configurations head to the [API reference](https://api.python.langchain.com/en/latest/agent_toolkits/langchain_community.agent_toolkits.financial_datasets.toolkit.FinancialDatasetsToolkit.html)."
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"collapsed": false
}
}
],
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}