Skip to content
このページは中国語の原文から翻訳されましたが、その後原文が更新されているため、内容が古い可能性があります。正本は中国語版です。 中国語の原文を見る →
MemX × Kova × Lurus API

記憶を持つ AI カスタマーサポートの構築

目標:30 分以内に、ユーザーの過去の質問を記憶し、クラッシュから自動復旧し、必要に応じて知識を蒸留するサポート Agent を動かします。

30 分動作目標
6 ステップ依存関係から書き戻しまで
3 サービスMemX · Kova · API

アーキテクチャ図 ​

3 つのサービスがそれぞれ役割を担います。MemX は長期記憶の想起と蒸留を、Lurus API は LLM 呼び出しを、Kova WAL は状態の永続化とクラッシュ復旧を担当します。

記憶を持つ AI サポートのアーキテクチャ
graph LR
  U[ユーザー] --> W[Web フロントエンド]
  W -->|HTTP| A[Agent App]
  A -->|1. 想起| M[MemX]
  A -->|2. LLM| L[Lurus API]
  A -->|3. 状態| K[Kova WAL]
  A -->|4. 書き込み| M
  L --> A
  M --> A

6 ステップ ​

  1. 依存関係の準備

    bash
    pip install lurus memx-client kova-py lumen-ai openai
  2. 3 つのサービスの初期化

    python
    from openai import OpenAI
    from memx import Memory
    from kova import KovaClient
    
    llm = OpenAI(base_url="https://hub.lurus.cn/v1", api_key="sk-...")
    mem = Memory(config={"ace_enabled": True})
    kova = KovaClient("kova://localhost")
  3. Agent 状態の定義

    python
    from typing import TypedDict, Annotated, Sequence
    
    class State(TypedDict):
        user_id: str
        messages: Annotated[Sequence, "chat history"]
        relevant_memory: list
  4. 履歴の想起 — MemX から現在の質問に関連する記憶を取得します

    python
    def retrieve_memory(state: State) -> State:
        last = state["messages"][-1]["content"]
        hits = mem.search(last, user_id=state["user_id"], limit=5)
        return {**state, "relevant_memory": hits}
  5. LLM の呼び出しと応答 — 想起した事実を system prompt に注入します

    python
    def respond(state: State) -> State:
        context = "\n".join(h["text"] for h in state["relevant_memory"])
        resp = llm.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {"role": "system", "content": f"已知事实:\n{context}"},
                *state["messages"],
            ],
        )
        reply = resp.choices[0].message.content
        return {**state, "messages": [*state["messages"], {"role": "assistant", "content": reply}]}
  6. 蒸留と書き戻し — 新しい会話を MemX に書き戻し、次回の想起で利用できるようにします

    python
    def distill(state: State) -> State:
        mem.add(
            list(state["messages"][-2:]),
            user_id=state["user_id"],
            scope="support:general",
        )
        return state

Kova クラッシュ復旧を追加する ​

Kova を LangGraph の checkpointer として接続すると、Agent はクラッシュ後に WAL から復旧し、LLM を再呼び出ししません。

python
from kova.langgraph import KovaCheckpointer

graph = wf.compile(checkpointer=KovaCheckpointer(kova))

なぜ LLM を再呼び出ししないのか

Kova は各ステップの実行を先行書き込みログ(WAL)に記録します。プロセスのクラッシュ後、エンジンはブレークポイントから実行状態を再生し、完了済みの LLM 呼び出しは再び発行されません。これにより Token を節約しつつ、回答の一貫性も保証されます。

完全なプロジェクト成果物 ​

サンプルリポジトリ

https://github.com/hanmahong5-arch/lurus-examples/tree/main/memory-agent — コードの完全版、docker-compose.yml(ローカルで MemX + Kova を起動)、3 ノードをカバーする Pytest、.env.example を含みます。

次のステップ ​

次のステップ

Powered by Lurus Technologies