LangChainのエージェントはWikipediaを検索し、Webを閲覧し、Pythonを実行できる。でもトヨタの売上推移を聞くと、ハルシネーションするか「金融データベースにアクセスできません」と返す。
日本の財務データに対応したLangChainツールキットがないからだ。
langchain-axioraを作った。18ツール、Retriever、4,125社、10年分のEDINET有報データ。エージェントに売上高、純利益、ROE、健全性スコア、競合比較、有報の英訳セクションへのアクセスを与える。
インストールから最初のエージェント起動まで5分。

インストール
uv add langchain-axiora langchain-anthropic langgraphAPIキーを設定:
export AXIORA_API_KEY="ax_live_..."
export ANTHROPIC_API_KEY="sk-ant-..."最初のエージェント:6行
from langchain_axiora import AxioraToolkit
from langchain_anthropic import ChatAnthropic
from langgraph.prebuilt import create_react_agent
toolkit = AxioraToolkit()
agent = create_react_agent(ChatAnthropic(model="claude-sonnet-4-20250514"), toolkit.get_tools())
result = agent.invoke({"messages": [{"role": "user", "content": "トヨタとホンダの過去3年の財務データを比較して"}]})これだけ。エージェントが企業を検索し、財務データを取得し、比較する — ツール呼び出しを自動で連鎖。
エージェントの動作
「トヨタとホンダの過去3年の財務データを比較して」と聞いたときの内部動作。エージェントは3回のツール呼び出しを行う:
1. axiora_get_financials → トヨタ (7203)
{
"fiscal_year": 2025,
"revenue": 48036704000000,
"net_income": 4789755000000,
"operating_margin": 9.98,
"roe": 12.99,
"num_employees": 383853
}2. axiora_get_financials → ホンダ (7267)
{
"fiscal_year": 2025,
"revenue": 21688767000000,
"net_income": 903034000000,
"operating_margin": 5.59,
"roe": 7.15,
"num_employees": 194173
}3. エージェントが分析
トヨタの売上高(¥48.0兆)はホンダ(¥21.7兆)の2.2倍。FY2023〜FY2025でトヨタは29%増収、ホンダは28%増収。だが利益率の差は歴然:トヨタの営業利益率は9.98%、ホンダは5.59%。ROEもトヨタの12.99%がホンダの7.15%をほぼ倍。
監査済みEDINET有報の実数値。ハルシネーションではない。
18ツール
エージェントが呼び出せる全ツール:
| ツール | 機能 |
|---|---|
axiora_search_companies | 企業名(日/英)、証券コードで検索 |
axiora_get_company | 企業詳細 — セクター、上場区分、決算期 |
axiora_get_financials | 売上高、利益、資産、自己資本、各種比率 |
axiora_get_growth | 前年比成長率、3/5年CAGR |
axiora_get_ranking | 任意の指標でランキング |
axiora_get_sector_overview | セクター別の統計と企業数 |
axiora_compare_companies | 2〜5社の財務データを並列比較 |
axiora_screen_companies | セクター、売上高、ROE、PERでフィルタ |
axiora_get_health_score | 財務健全性スコア(0〜100)、内訳付き |
axiora_get_health_ranking | 健全性スコアでランキング |
axiora_get_peers | セクター・売上規模が近い類似企業を検索 |
axiora_get_timeseries | チャート用の時系列データ |
axiora_list_filings | 企業・種別で提出書類を一覧 |
axiora_get_translations | 有報セクションの英訳を取得 |
axiora_search_translations | 英訳の全文検索 |
axiora_get_filing_calendar | 月別の提出件数 |
axiora_search_companies_batch | 一括検索(最大10社) |
axiora_get_coverage | データカバレッジ統計 |
18ツール — 日本の財務分析は3月決算、3つの会計基準(J-GAAP、IFRS、US-GAAP)、XBRLの複雑なタクソノミへの対応が必要だから。
必要なツールだけ使う
シンプルなエージェントに18ツールは多すぎる。selected_toolsで絞り込み:
toolkit = AxioraToolkit(
selected_tools=[
"axiora_search_companies",
"axiora_get_financials",
"axiora_compare_companies",
],
)3ツール。「トヨタとホンダを比較して」には対応できる。スクリーニングやランキングはできない。存在しないツール名を渡すとValueErrorで有効なリストが返る — サイレントに無視されることはない。
実用例:高ROE企業を探す
複数ツールを連鎖させるプロンプト:
result = agent.invoke({"messages": [{"role": "user", "content": """
ROE15%以上の日本企業を探して。
上位3社の健全性スコアを取得し、財務データを比較して。
"""}]})エージェントの動作:
axiora_screen_companiesをmin_roe=15で呼び出し — 東京海上(ROE 20.65%)、ファーストリテイリング(19.73%)、リクルート(25.08%)を発見- 各社の
axiora_get_health_scoreを取得 axiora_compare_companiesで並列比較- 収益性と財務健全性の最適な組み合わせを分析
4回のツール呼び出しが自動連鎖。スクリーニングロジックを1行も書いていない。
Retriever:有報の英訳でRAG
すべてのユースケースにエージェントが必要なわけではない。有報の英訳でRAGを構築するなら、AxioraRetrieverが翻訳セクションを検索してLangChainのDocumentオブジェクトを返す:
from langchain_axiora import AxioraRetriever
retriever = AxioraRetriever(section="risk_factors", k=5)
docs = retriever.invoke("semiconductor supply chain risk")各ドキュメントにpage_content(翻訳テキスト)とmetadata(企業名、ドキュメントID、セクション)が含まれる。任意のチェーンに接続できる:
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
llm = ChatAnthropic(model="claude-sonnet-4-20250514")
prompt = ChatPromptTemplate.from_template(
"以下の有報抜粋に基づいて回答してください:\n{context}\n\n質問: {question}"
)
chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | llm
result = chain.invoke("日本のメーカーが報告している半導体リスクは?")5社のリスクファクターを取得・統合。海外チームとの共有や、英語ベースの分析パイプラインに使える。
ツールキットなしで個別ツールを使う
エージェントもRetrieverも不要なら、ツールを直接使用:
from langchain_axiora import GetFinancialsTool
tool = GetFinancialsTool() # 環境変数AXIORA_API_KEYから読み取り
result = tool.invoke({"code": "7203", "years": 3})すべてのツールがapi_key=を直接受け取るか、環境変数AXIORA_API_KEYから読み取る。ラッパーオブジェクト不要。
エラーハンドリング
全ツールがhandle_tool_error=Trueを設定。APIがエラーを返すと、エージェントはクラッシュせずヒントメッセージを受け取る:
Axiora API error 404. Company not found. Use axiora_search_companies to find the correct code.エージェントはこのメッセージを読み、axiora_search_companiesを呼び出し、正しいコードを取得してリトライする。クラッシュではなく自己修正。
データの出所
すべての数値は監査済みEDINET有報(有価証券報告書)から取得。3つの会計基準を横断してXBRLをパースし、型付きJSONで配信。
4,125社。最大10年分の履歴。提出から30分以内に更新。
はじめる
uv add langchain-axiora