跳到主要內容
Open In ColabOpen on GitHub

FMP Data

透過自然語言查詢存取金融市場數據。

概觀

FMP (Financial Modeling Prep) LangChain 整合提供了一種透過自然語言查詢存取金融市場數據的無縫方式。此整合提供了兩個主要組件:

  • FMPDataToolkit:根據自然語言查詢建立工具集合
  • FMPDataTool:單一整合工具,可自動選擇並使用適當的端點

此整合利用 LangChain 的語義搜尋功能,將使用者查詢與最相關的 FMP API 端點進行匹配,使金融數據存取更加直觀和高效。

設定

!pip install -U langchain-fmp-data
import os

# Replace with your actual API keys
os.environ["FMP_API_KEY"] = "your-fmp-api-key" # pragma: allowlist secret
os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # pragma: allowlist secret

設定 LangSmith 以獲得一流的可觀察性也很有幫助(但非必要)

# os.environ["LANGSMITH_TRACING"] = "true"
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass()

實例化

有兩種主要方法可以實例化 FMP LangChain 整合:

  1. 使用 FMPDataToolkit
from langchain_fmp_data import FMPDataToolkit

query = "Get stock market prices and technical indicators"
# Basic instantiation
toolkit = FMPDataToolkit(query=query)

# Instantiation with specific query focus
market_toolkit = FMPDataToolkit(
query=query,
num_results=5,
)

# Instantiation with custom configuration
custom_toolkit = FMPDataToolkit(
query="Financial analysis",
num_results=3,
similarity_threshold=0.4,
cache_dir="/custom/cache/path",
)
  1. 使用 FMPDataTool
from langchain_fmp_data import FMPDataTool
from langchain_fmp_data.tools import ResponseFormat

# Basic instantiation
tool = FMPDataTool()

# Advanced instantiation with custom settings
advanced_tool = FMPDataTool(
max_iterations=50,
temperature=0.2,
)

調用

這些工具可以透過多種方式調用:

直接調用

# Using FMPDataTool
tool_direct = FMPDataTool()

# Basic query
# fmt: off
result = tool.invoke({"query": "What's Apple's current stock price?"})
# fmt: on

# Advanced query with specific format
# fmt: off
detailed_result = tool_direct.invoke(
{
"query": "Compare Tesla and Ford's profit margins",
"response_format": ResponseFormat.BOTH,
}
)
# fmt: on

與 LangChain Agents 一起使用

from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_openai import ChatOpenAI

# Setup
llm = ChatOpenAI(temperature=0)
toolkit = FMPDataToolkit(
query="Stock analysis",
num_results=3,
)
tools = toolkit.get_tools()

# Create agent
prompt = "You are a helpful assistant. Answer the user's questions based on the provided context."
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
)

# Run query
# fmt: off
response = agent_executor.invoke({"input": "What's the PE ratio of Microsoft?"})
# fmt: on

進階用法

您可以自訂工具的行為:

# Initialize with custom settings
advanced_tool = FMPDataTool(
max_iterations=50, # Increase max iterations for complex queries
temperature=0.2, # Adjust temperature for more/less focused responses
)

# Example of a complex multi-part analysis
query = """
Analyze Apple's financial health by:
1. Examining current ratios and debt levels
2. Comparing profit margins to industry average
3. Looking at cash flow trends
4. Assessing growth metrics
"""
# fmt: off
response = advanced_tool.invoke(
{
"query": query,
"response_format": ResponseFormat.BOTH}
)
# fmt: on
print("Detailed Financial Analysis:")
print(response)

鏈結

您可以像其他工具一樣,簡單地透過使用所需的模型建立鏈來鏈結工具。

from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI

# Setup
llm = ChatOpenAI(temperature=0)
toolkit = FMPDataToolkit(query="Stock analysis", num_results=3)
tools = toolkit.get_tools()

llm_with_tools = llm.bind(functions=tools)
output_parser = StrOutputParser()
# Create chain
runner = llm_with_tools | output_parser

# Run chain
# fmt: off
response = runner.invoke(
{
"input": "What's the PE ratio of Microsoft?"
}
)
# fmt: on

API 參考

FMPDataToolkit

用於建立 FMP API 工具集合的主要類別

from typing import Any

from langchain.tools import Tool


class FMPDataToolkit:
"""Creates a collection of FMP data tools based on queries."""

def __init__(
self,
query: str | None = None,
num_results: int = 3,
similarity_threshold: float = 0.3,
cache_dir: str | None = None,
): ...

def get_tools(self) -> list[Tool]:
"""Returns a list of relevant FMP API tools based on the query."""
...
API 參考:Tool

FMPDataTool

自動選擇適當 FMP 端點的整合工具

# fmt: off
class FMPDataTool:
"""Single unified tool for accessing FMP data through natural language."""

def __init__(
self,
max_iterations: int = 3,
temperature: float = 0.0,
): ...

def invoke(
self,
input: dict[str, Any],
) -> str | dict[str, Any]:
"""Execute a natural language query against FMP API."""
...

# fmt: on

ResponseFormat

用於控制回應格式的列舉

from enum import Enum


class ResponseFormat(str, Enum):
RAW = "raw" # Raw API response
ANALYSIS = "text" # Natural language analysis
BOTH = "both" # Both raw data and analysis

此頁面是否對您有幫助?