① Retrieverパターン(RAG)
❖ 想定用途:
- 操作マニュアル、議事録、設計書、仕様書(ファイル・DBベース)の検索と要約
- Odooのカスタマイズ仕様などの社内ナレッジ検索
❖ LangChain構成:
pythonコピーする編集するfrom langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.document_loaders import DirectoryLoader
from langchain.chains import RetrievalQA
- 文書は
DirectoryLoaderで読み込み(PDF, Markdown, HTML) OpenAIEmbeddingsでベクトル化FAISSなどで永続ベクトルDB構築RetrievalQAで質問に対してRAG方式で検索・回答
② Toolパターン(Odoo APIの操作)
❖ 想定用途:
- LangChain AgentにOdooのJSON-RPCをラップしたToolを渡すことで、「データの照会」「レコード作成」などを自然言語で指示可能に
❖ 実装例:
pythonコピーする編集するfrom langchain.agents import Tool
from langchain.agents import initialize_agent
from langchain.agents.agent_types import AgentType
# Odoo JSON-RPCをラップする関数
def search_partner(query: str):
# 内部でrequests使ってOdooのsearch_read呼び出し
...
return f"{len(results)} results found"
odoo_search_tool = Tool(
name="SearchPartnerTool",
func=search_partner,
description="Find partners in Odoo by name or criteria"
)
agent = initialize_agent(
tools=[odoo_search_tool],
llm=ChatOpenAI(),
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)
③ SQLDatabaseChainによるPostgreSQL直結
❖ 想定用途:
- OdooのバックエンドDBに対して直接SQL発行し、構造的な情報を取得・要約
- 例:売上レポート、在庫照会、期間別分析
❖ 実装:
pythonコピーする編集するfrom langchain.sql_database import SQLDatabase
from langchain.chains import SQLDatabaseChain
db = SQLDatabase.from_uri("postgresql+psycopg2://odoo:odoo@localhost:5432/odoo")
chain = SQLDatabaseChain.from_llm(llm=ChatOpenAI(), db=db, verbose=True)
response = chain.run("Show me total sales by month for the last 3 months.")
※ metadataの定義次第でJOINも可
※ セキュリティのため読み取り専用アカウントを使うこと
🔌 LangChainの統合戦略(まとめ)
| 構成要素 | LangChain構成 | 補足 |
|---|---|---|
| Odoo JSON-RPC | Tool として登録 | requests or xmlrpc.client |
| マニュアル/仕様書 | RetrieverQA + FAISS | 社内ナレッジ検索 |
| PostgreSQLの照会 | SQLDatabaseChain | 読み取り専用接続 |
| UI連携 | Streamlit, Gradio, Odoo内iframe | 実装次第で埋め込み可能 |
| チェーン制御 | MultiPromptChain, RouterChain | 意図分類 or RAG/Tool切替 |
これに加えてMetabaseを用いてグラフをかけるようにする
コメントを残す