1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ベクトルDBとMLOpsを活用したAIエージェント

1
Posted at

はじめに(Why)

投資判断に必要なデータは、日々の株価、企業ニュース、経済指標など多岐にわたります。
このような複雑な判断プロセスを「AIエージェント」に委ねる構成が注目されています。

本記事では、複数の専門エージェントを連携させた「投資判断AIエージェントシステム」の実装パターンについて紹介します。
yfinance、ChromaDB、LangGraph、MLflow、FastAPI などを用いて、LLMと構造化データを組み合わせた構成を実現しました。

AIエージェントとは?

エージェント構成の考え方
投資において「ニュースも見るし、チャートも見るし、決算も見る」──人間の投資判断もマルチソースです。
これを以下のようにモジュール化したのが本プロジェクトのAIエージェント構成です。


├── 短期テクニカル分析Agent(yfinanceで価格取得 + テクニカル指標計算)
├── ニュース・センチメント分析Agent(GoogleNews + Gemini要約)
├── ボラティリティ分析Agent(ATR指標を算出)
├── 中期ファンダメンタル分析Agent(PER, PBR, EPS, 売上成長率など)
├── マクロ経済要因分析Agent(FRED, IMF, FRB, 日銀など)
└── 投資評価統合Agent(LangGraphでワークフロー定義)

使用技術と構成(How)

使用ライブラリ一覧

技術/ライブラリ 用途
yfinance 株価の取得とテクニカル指標(移動平均、MACD、RSI)に使用
ChromaDB ニュースや決算情報をベクトル検索して文脈情報をLLMに供給
LangGraph 各エージェントの呼び出し制御(評価フローの設計)に使用
MLflow モデルの保存・呼び出し・ステージ管理
FastAPI API化して各エージェントを独立動作させる
Docker Compose 環境を統一・再利用できる構成に

実装内容とコード解説

1. yfinance による株価データ取得とテクニカル指標の計算

import yfinance as yf
import pandas as pd

def get_technical_indicators(symbol: str):
    df = yf.download(symbol, period="3mo", interval="1d")
    df['MA5'] = df['Close'].rolling(window=5).mean()
    df['MA20'] = df['Close'].rolling(window=20).mean()
    df['RSI'] = compute_rsi(df['Close'])
    df['MACD'] = df['Close'].ewm(span=12).mean() - df['Close'].ewm(span=26).mean()
    return df.tail(1)  # 最新データのみ返す

2. ChromaDB によるニュース文書のベクトル検索

from chromadb import Client
from chromadb.config import Settings
from sentence_transformers import SentenceTransformer

chroma_client = Client(Settings(chroma_db_impl="duckdb+parquet"))
collection = chroma_client.get_or_create_collection("news")

# ニュースの格納
def store_news(documents):
    embeddings = SentenceTransformer("all-MiniLM-L6-v2").encode(documents)
    collection.add(documents=documents, embeddings=embeddings)

# 検索
def search_related_news(query: str):
    query_embedding = SentenceTransformer("all-MiniLM-L6-v2").encode([query])
    return collection.query(query_embeddings=query_embedding, n_results=3)
  • ここで取得した「類似ニュース文」をLLM(Gemini)に要約させ、Agentに渡します。

3. LangGraph によるエージェント評価フローの定義

from langgraph.graph import StateGraph

builder = StateGraph()

builder.add_node("tech", tech_agent)
builder.add_node("news", news_agent)
builder.add_node("volatility", atr_agent)
builder.add_node("fundamentals", fundamental_agent)
builder.add_node("macro", macro_agent)
builder.add_node("score", evaluate_agent)

builder.set_entry_point("tech")
builder.add_edge("tech", "news")
builder.add_edge("news", "volatility")
builder.add_edge("volatility", "fundamentals")
builder.add_edge("fundamentals", "macro")
builder.add_edge("macro", "score")
  • 順に処理を流す評価フローを明示的に構成。
  • 将来的にはAgentの応答によって次ノードを変える「if分岐」なども可能です。

4. MLflow × FastAPIでモデルの呼び出し

import mlflow.sklearn

model = mlflow.sklearn.load_model("models:/atr_predictor/Production")

@app.post("/predict/atr")
def predict_volatility(data: PriceData):
    df = pd.DataFrame([data.dict()])
    return {"atr": model.predict(df)[0]}
  • これにより、ボラティリティ分析Agentはステージングされたモデルを使用して予測。
  • MLflow UIを使えば、モデル更新・履歴管理が視覚的に操作可能です。

工夫した観点(What was clever?)

  • モジュール化とAPI分割

    • 各AgentはFastAPIで独立起動できるAPIとして構成 → 開発・検証がしやすい
    • Docker Composeにより再現性のあるエージェント環境を構築可能
  • Gemini活用とRAG(検索強化生成)

    • Gemini APIを使って「要約・評価」を行い、RAGにより文脈誤爆を低減
    • 投資対象企業のIRやニュースをChromaで埋め込み→検索→要約という流れを自動化
  • LangGraphによるワークフローの明示化

  • 各Agentの順序・関係性がコードで明確に管理され、将来的な** 拡張(並列処理、分岐)** も容易

So what:この構成が実務でどう役立つのか?

  • 複数視点の分析を統合する実践的構成を試せる
  • LLM + データ分析の融合構成(=投資AI以外にも応用可能)
  • 小規模チームや個人でも、PoC・プロトタイプが短時間で構築可能

今後の展望

  • Slack連携やチャットボット化による対話型インターフェース
  • モデル監視(Prometheus + Grafana)とパフォーマンス可視化
  • Agentの意思決定プロセス可視化(LIME, SHAP)

GitHub & 参考リンク

GitHub
MLflow
LangGraph
ChromaDB
yfinance
GitHub

この構成が「AIエージェントの構築を通じて、どうLLMやMLOpsを実務に活かすか?」のヒントになれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?