Closed11

オープンソースのRAGアプリ「RAGFlow」を試す

kun432kun432

かなり新し目のフレームワークRAGプラットフォームアプリ

https://github.com/infiniflow/ragflow

RAGFlowとは?

RAGFlowは、深い文書理解に基づいたオープンソースのRAG(Retrieval-Augmented Generation)エンジンである。LLM(大規模言語モデル)を組み合わせることで、様々な複雑なフォーマットのデータから根拠のある引用に裏打ちされた、真実味のある質問応答機能を提供し、あらゆる規模のビジネスに合理化されたRAGワークフローを提供する。

kun432kun432

Quick startにしたがって実施。

https://github.com/infiniflow/ragflow/tree/main/docs/quickstart.md

ローカルのUbuntu 22.04でやってみる。

カーネルパラメータを変更。vm.max_map_countを262144以上にする必要がある。

$ sysctl vm.max_map_count
vm.max_map_count = 65530
$ sudo sysctl -w vm.max_map_count=262144
$ echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

レポジトリをクローン

$ git clone https://github.com/infiniflow/ragflow && cd ragflow

dockerディレクトリに移動

$ cd docker

entrypoint.shに実行権を付与

$ chmod +x ./entrypoint.sh

docker composeで上げる。そこそこ時間がかかる。なお、今回はローカルで動かすので .envservice_conf.yamlは特にいじっていない。この辺は後で確認する。

$ docker compose up -d

上がったらログを確認。

$ docker logs -f ragflow-server

とりあえずログは表示されて立ち上がっている様子。少しwarningやerrorっぽいものも見えるけども。

[WARNING] [2024-05-24 17:52:27,679] [synonym.__init__] [line:24]: Realtime synonym is disabled, since no redis connection.
[WARNING] [2024-05-24 17:52:29,224] [synonym.__init__] [line:24]: Realtime synonym is disabled, since no redis connection.
[WARNING] Load term.freq FAIL!

    ____                 ______ __
   / __ \ ____ _ ____ _ / ____// /____  _      __
  / /_/ // __ `// __ `// /_   / // __ \| | /| / /
 / _, _// /_/ // /_/ // __/  / // /_/ /| |/ |/ /
/_/ |_| \__,_/ \__, //_/    /_/ \____/ |__/|__/
              /____/


[ERROR] [2024-05-24 17:52:31,866] [http_request._handle_response] [line:172]: Request: https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation failed, status: 401, message: Invalid API-key provided.
[INFO] [2024-05-24 17:52:31,916] [_internal._log] [line:96]: WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:9380
 * Running on http://XXX.XXX.XXX.XXX:9380
[INFO] [2024-05-24 17:52:31,917] [_internal._log] [line:96]: Press CTRL+C to quit

warningはちょっとよくわからない。
https://github.com/infiniflow/ragflow/issues/911

errorはとりあえず問題なさげ?
https://github.com/infiniflow/ragflow/issues/884

一旦このままで進める。

で、80番ポートでサービスが立ち上がっているので、ブラウザでアクセスする。

ログイン画面が表示される。まずはアカウントを作成する。「Sign up」をクリック。

アカウント作成画面が表示されるので、メアド・ニックネーム・パスワードを入力して「Continue」をクリック。

先ほど設定したメアド・パスワードが入力されているので「Sign in」

ログインできたっぽい。

kun432kun432

最初にモデルの設定を行う。右上のアイコンをクリック。

ユーザ設定画面が表示されるので、左のメニューにある「Model Providers」をクリック

デフォルトではアリババクラウドのモデル「通義千問(Tongyi-Qianwen)」が既に追加されているっぽい。おそらくerrorがでてたのはこれだと思う。ここにOpenAIのモデルを追加する。

APIキーを入力。

OpenAIが利用可能となった。「Show more models」をクリックすると、対応しているモデルの一覧が見れる。

gpt-4oも対応済みの様子。

「System Model Setttings」でデフォルトで使用するモデルを設定できるっぽいので、OpenAIのモデルに変更した。

kun432kun432

ではRAG用にKnowledge Baseを登録してみる。以下のデータ(PDFファイル)を使ってみる。

https://www.city.kobe.lg.jp/a64051/shise/toke/sightseeing.html

観光動向調査(令和4年度)
https://www.city.kobe.lg.jp/documents/15123/r4_doukou.pdf

上の「Knowledge Base」をクリックしてから「Create Knowledge base」をクリック。

Knowledge base名を入力。

でここでまずKnowledge baseの設定を行う。

のだけども、気になるのは、Languageで選べるのは"English"と"Chinese"だけ なんだよな・・・

この項目が何を意味するのかがまだわからない。一旦は"Chinese"にしてみる、Englishよりは日本語に近いだろうし。

で、もう一つ重要そうなのが"Chunk method"。ここはどうやらドキュメントの種類やファイルフォーマットにあわせて変えるみたい。選べるのは以下。

  • General: 汎用。一般的なテキストのチャンク分割っぽい。
  • Q&A: 質問と回答向け。ExcelやCSVなどで2列にそれぞれ質問・回答が入っているケースを想定。
  • Resume: レジュメ向け。テキストをチャンキングするのではなく構造化データとして読み込む。
  • Manual: マニュアル向け。見開きとか段組みとかを解除して構造化データとして読み込む。
  • Table: 表形式向け。ExcelやCSVなど。
  • Paper: 論文向け。セクションに分割してくれる。
  • Book: 書籍向け。ページ指定ができるっぽい。
  • Laws: リーガルドキュメント向け。形式が厳格なので分割する単位をそこから判断する。
  • Presentation: プレゼン資料向け。ページ単位で分割され、サムネイルが保存される。
  • Picture: 画像向け。テキストが含まれている場合はOCRもしくはVision対応LLMによる認識が有効になる。動画も今後対応する予定らしい。
  • One: チャンク分割せず、ドキュメント自体をチャンクとして扱う。

それぞれの詳細は右で説明してくれるので、もっとも最適と思われるものを選べば良さそう。とりあえず今回は"Paper"にしてみる。以下の内容で保存。

次にDatasetとしてファイルをアップロードする。「Add file」→「Local files」をクリック。

ファイルをアップロード。

でこの状態はまだアップロードしただけで、パースされていない"UNSTART"の状態になっている。再生ボタンのようなアイコンをクリックするとパースが開始される。

開始された。

がしばらく待っても進捗が進む気配がなかった。一旦止めて再開させてみたら、進みだして完了した。ファイル名をクリックして詳細を見てみる。

分割されたチャンクが表示される。"Paper"の説明にあった通り、セクションごとにチャンク分割されているっぽい。あと、表もちゃんと読み込んでいたり、該当箇所のサムネイル画像がついている。

元のドキュメント、表部分はテキストが埋め込まれているのでこれだけだとOCRしたかどうかは判断できないが、グラフ部分には画像が埋め込まれているようでこの部分もテキストで出力されているので、OCRが行われているのだろうと推測する。ただ、漢字が間違って認識されているのは、Languageの設定を"Chineseにしているためだと思う。

Retrieval testingからテストしてみる。

検索キーワードを入れて検索。今回は「利用交通機関の内訳」で検索してみた。どうやらハイブリッドがデフォルトで有効になっているっぽくて、ベクトル検索のスコアしきい値や、ハイブリッド時のキーワード検索・ベクトル検索の重み付けも設定できる。

結果だけ見ると日本語でも多分いけてるっぽい。以下は検索結果1件目のサムネ。

kun432kun432

Chatしてみる。

上の"Chat"メニューから"Create Assitstant"をクリック。

設定画面が出てくる。タブごとに順次設定してく。まずAssitatnt Setting。

以下あたりを設定した

  • Assistant name: アシスタント名を入力
  • Set an opener: 最初に表示するアシスタントのメッセージを入力
  • Knowledgebases: 読み込ませたドキュメントのKnowledge baseを指定

次に、Prompt Engine。

デフォルトのシステムプロンプトの内容は以下のような感じだった。

You are an intelligent assistant. Please summarize the content of the knowledge base to answer the question. Please list the data in the knowledge base and answer in detail. When all knowledge base content is irrelevant to the question, your answer must include the sentence "The answer you are looking for is not found in the knowledge base!" Answers need to consider chat history.
      Here is the knowledge base:
      {knowledge}
      The above is the knowledge base.

日本語で答えれるように翻訳したものに置き換えてみた。

(日本語訳)
あなたは日本語で会話ができる知的なアシスタントです。質問に答えるために、ナレッジベースの内容を要約してください。ナレッジベースのデータを列挙し、詳細に答えてください。すべてのナレッジベースの内容が質問と無関係である場合、あなたの回答には "その質問に関する情報はナレッジベースに含まれていませんでした!" という一文が含まれていなければならない。回答はチャット履歴を考慮する必要がある。
      以下がナレッジベースの内容です:
      {knowledge}
      以上がナレッジベースの内容です。

その他、検索時のパラメータや、テンプレート変数等の設定もここで設定できるが、今回はシステムプロンプト以外はデフォルトで。

最後に"Model Setting"。

ここでモデルの選択やパラメータを設定する。今回はgpt-4oにした。あと、Freedomってのがパラメータのテンプレになってるらしくて、ざっくり"Precise(正確)" / "Imporvise(即興)" / "Balance(バランス)"から選択することもできるし、個々のパラメータを細かく設定することもできるみたい。

全部設定したらOKをクリック。

Asssistantが作成されたら、これをクリック。

チャットが動き出す。先ほど設定したメッセージが表示されている。

試しに質問してみた。

チャットボットあるあるだけども、日本語のIMEが考慮されていないようで、日本語漢字変換確定時のENTERで送信されてしまう・・・中国語のIMEではこういうのは問題にならないのだろうか?使ったこと無いのでわからないけども。

とりあえずテキストエディタから貼り付けてやってみた。

内容的にはあっている。

下にドキュメントのリンクも提供されているし、(i)をクリックすると元ドキュメントから引用された部分が表示される。

kun432kun432

作成したAsssitantは公開ができるっぽい。Assistantの横のアイコンをクリックして、"Chat Bot API"をクリック。

こんな画面。APIへのアクセスとウェブアプリとしての公開ができるっぽい。あと利用度もここに表示されるみたい。

まずAPIキーを作成。



で、APIドキュメントを見ようとするとどうやらまだドキュメントがないらしく404になる。。。。

AssistantのAPI部分のコードはおそらくこの辺。雑に読んで試してみる。

https://github.com/infiniflow/ragflow/tree/main/api/apps/api_app.py

まず、/new_conversationエンドポイントで、conversation_idを取得。これが会話のセッションになるらしい。必要となるのはdialogIdで、これがAssistantごとのIDになる。dialogIdはAssistantチャット画面のURLから取得できる。

$ curl -X GET http://XXX.XXX.XXX.XXX/v1/api/new_conversation/?dialogId=XXXXXXXXXXXXXXXX \
    -H 'Authorization: Bearer ragflow-XXXXXXXXXX'
{
  "data": {
    "create_date": "Mon, 27 May 2024 08:23:08 GMT",
    "create_time": 1716798188076,
    "dialog_id": "XXXXXXXXXXXXXXXX",
    "duration": 0.0,
    "id": "590486581c0211efb4260242c0a85006",
    "message": [
      {
        "content": "神戸市観光動向調査についての質問にお答えします。何を聞きたいですか?",
        "role": "assistant"
      }
    ],
    "reference": [],
    "round": 0,
    "thumb_up": 0,
    "tokens": 0,
    "update_date": "Mon, 27 May 2024 08:23:08 GMT",
    "update_time": 1716798188076,
    "user_id": ""
  },
  "retcode": 0,
  "retmsg": "success"
}

この中のidってのがconversationIdになるっぽいので、これを使って/completionエンドポイントにメッセージを送る。

$ curl -X POST http://XXX.XXX.XXX.XXX/v1/api/completion \
    -H 'Authorization: Bearer ragflow-XXXXXXXXXX' \
    -d '{"conversation_id":"590486581c0211efb4260242c0a85006", "messages":[{"content":"観光客が利用している交通機関の内訳について教えて。","role":"user"}], "stream":false}' | jq -r .
{
  "data": {
    "answer": "観光客が利用している交通機関の内訳について、以下の情報があります:\n\n### 神戸までの主な利用交通機関\n- **全市**:\n  - 「車、バイク」: 40.9%\n  - 鉄道(「新幹線」「JR」「阪急」「阪神」「山陽」の計): 46.9%\n\n- **地区別**:\n  - 『北野』: 鉄道利用者が62.2%で最も高い\n  - 『神戸港』: 鉄道利用者が60.0%\n  - 『市街地』: 鉄道利用者が57.3%\n  - 『西北神』: 車、バイク利用者が85.3%で飛びぬけて高い\n  - 『有馬』: バス利用者が18.6%と他の地区より高い\n\n### 神戸市内での主な交通手段\n- **全市**:\n  - 「車、バイク」: 昨年同様37.4%で最も高い\n  - 「JR」: 次いで30.5%\n  \n- **鉄道(「市営地下鉄」「JR」「阪急」「阪神」「山陽」の計)**:\n  - 全体では73.2%、昨年(52.5%)より20.7ポイント増加\n\n- **地区別**:\n  - 『北野』: 市内観光用ループバス14.9%と他の地区より高い\n  - 『西北神』: 車、バイクが8割を超える\n  - 『六甲・摩耶』『有馬』『須磨・舞子』では車、バイクが4割を超える\n  - 『市街地』『神戸港』では「JR」が3割を超え、高くなっている\n\n以上です。",
    "reference": {
      "chunks": [
        {
          "chunk_id": "dfd6e8032383b8aaf94f89737e2dc0f1",
          "content_ltks": " (4)交通机関利用状况\n①神戸までの主な利用交通机関\n●神戸までの主な交通手段は、全市では「车、バイク」が40.9%と约4割となっており、前回(46.6%)から 5.7ポイントの减少。一方、鉄道利用者(「新干线」「jr」「坂急」「坂神」「山阳」の计)は、46.9%で约5割となっている。●地区别にみると、鉄道利用者は『北野』(62.2%)で最も高く、次いで『神戸港』(60.0%)、『市街地』(57.3%)で高い比率。『西北神』では「车、バイク」(85.3%)が8割以上で飞びぬけて高い。また、「バス」利用者は『有马』(18.6%)において、他の地区と比较し高い比率となっている。\n5 ",
          "content_with_weight": "(4)交通機関利用状況\n①神戸までの主な利用交通機関\n●神戸までの主な交通手段は、全市では「車、バイク」が40.9%と約4割となっており、前回(46.6%)から5.7ポイントの減少。一方、鉄道利用者(「新幹線」「JR」「阪急」「阪神」「山陽」の計)は、46.9%で約5割となっている。●地区別にみると、鉄道利用者は『北野』(62.2%)で最も高く、次いで『神戸港』(60.0%)、『市街地』(57.3%)で高い比率。『西北神』では「車、バイク」(85.3%)が8割以上で飛びぬけて高い。また、「バス」利用者は『有馬』(18.6%)において、他の地区と比較し高い比率となっている。\n5",
          "doc_id": "fafce9ce19fe11efa4600242c0a85006",
          "docnm_kwd": "r4_doukou.pdf",
          "img_id": "e741915419fa11efb4220242c0a85006-dfd6e8032383b8aaf94f89737e2dc0f1",
          "important_kwd": [],
          "kb_id": "e741915419fa11efb4220242c0a85006",
          "positions": [
            [
              6.0,
              71.0,
              518.0,
              70.0,
              82.0
            ],
            [
              6.0,
              73.0,
              520.0,
              95.0,
              108.0
            ],
            [
              6.0,
              80.0,
              527.0,
              119.0,
              240.0
            ],
            [
              6.0,
              297.0,
              744.0,
              807.0,
              813.0
            ]
          ],
          "similarity": 0.35115227641049396,
          "term_similarity": 0.3059275095696584,
          "vector_similarity": 0.45667673237244366
        },
        {
          "chunk_id": "8a639e798733faa50ddc2d78bc734f3c",
          "content_ltks": "ⅱ.利用交通机関\n神戸までの主な利用交通手段としては、全市では「车、バイク」が约 4割、鉄道(新干线、 jr、坂急、坂神、山阳)利用者が4割を超えている。地区别にみると、新干线利用者は『北野』が约 2割と他の地区より高い。一方、车利用者(バイク含む)は『西北神』で 8割を超え、飞びぬけて高くなっている。また、神戸市内での主な利用交通手段としては、全市では车利用の割合が3割を超えて最も高い。地区别にみると、「市内観光用のループバス」は『北野』において 1割以上で他地区より高い。「车、バイク」は『西北神』で 8割超、『六甲・摩耶』『有马』『须磨・舞子』では4割を超えている。\n<(4)参照>\nⅲ .来神动机・情报収集\n神戸観光の动机(きっかけ)としては、全市では「前に来てよかった」が最も高く、次いで「家族・友人・知人の话」でそれぞれ2割を超えている。地区别にみると、『北野』『六甲・摩耶』『有马』の各地区は「家族・友人・知人の话」が最も高く、『西北神』はインターネットが约2割で最も高い。神戸観光にあたっての情报収集の方法としては、全市では旅行决定前・后ともに「インターネット」が约 4割と最も高くなっている。また、すべての地区において、「家族・友人・知人の话」は旅行决定前が旅行决定后より高くなっている。\n<(5)( 6)参照>\nⅳ .旅行同行者・旅行形态\n今回の旅行の同行者として、全市では「家族(子连れ)」が最も高く、次いで「友人知人」、「家族(夫妇・パートナーのみ)」で、いずれも2割超となっている。地区别にみると、『须磨・舞子』では「家族(子连れ)」が 4割を超え、高くなっている。「友人知人」は『北野』『六甲・摩耶』『有马』で约 3割と高くなっている。旅行形态としては、全市で交通机関や宿泊施设などを予约していない割合が约8割となっている。地区别でみても、『有马』を除くすべての地区で予约していない割合が过半数を占める。个人で予约した割合は『有马』では 5割と高くなっている。\n<(7)( 8)参照> ",
          "content_with_weight": "Ⅱ.利用交通機関\n神戸までの主な利用交通手段としては、全市では「車、バイク」が約4割、鉄道(新幹線、JR、阪急、阪神、山陽)利用者が4割を超えている。地区別にみると、新幹線利用者は『北野』が約2割と他の地区より高い。一方、車利用者(バイク含む)は『西北神』で8割を超え、飛びぬけて高くなっている。また、神戸市内での主な利用交通手段としては、全市では車利用の割合が3割を超えて最も高い。地区別にみると、「市内観光用のループバス」は『北野』において1割以上で他地区より高い。「車、バイク」は『西北神』で8割超、『六甲・摩耶』『有馬』『須磨・舞子』では4割を超えている。\n<(4)参照>\nⅢ.来神動機・情報収集\n神戸観光の動機(きっかけ)としては、全市では「前に来てよかった」が最も高く、次いで「家族・友人・知人の話」でそれぞれ2割を超えている。地区別にみると、『北野』『六甲・摩耶』『有馬』の各地区は「家族・友人・知人の話」が最も高く、『西北神』はインターネットが約2割で最も高い。神戸観光にあたっての情報収集の方法としては、全市では旅行決定前・後ともに「インターネット」が約4割と最も高くなっている。また、すべての地区において、「家族・友人・知人の話」は旅行決定前が旅行決定後より高くなっている。\n<(5)(6)参照>\nⅣ.旅行同行者・旅行形態\n今回の旅行の同行者として、全市では「家族(子連れ)」が最も高く、次いで「友人知人」、「家族(夫婦・パートナーのみ)」で、いずれも2割超となっている。地区別にみると、『須磨・舞子』では「家族(子連れ)」が4割を超え、高くなっている。「友人知人」は『北野』『六甲・摩耶』『有馬』で約3割と高くなっている。旅行形態としては、全市で交通機関や宿泊施設などを予約していない割合が約8割となっている。地区別でみても、『有馬』を除くすべての地区で予約していない割合が過半数を占める。個人で予約した割合は『有馬』では5割と高くなっている。\n<(7)(8)参照>",
          "doc_id": "fafce9ce19fe11efa4600242c0a85006",
          "docnm_kwd": "r4_doukou.pdf",
          "img_id": "e741915419fa11efb4220242c0a85006-8a639e798733faa50ddc2d78bc734f3c",
          "important_kwd": [],
          "kb_id": "e741915419fa11efb4220242c0a85006",
          "positions": [
            [
              2.0,
              68.0,
              516.0,
              261.0,
              276.0
            ],
            [
              2.0,
              78.0,
              526.0,
              287.0,
              416.0
            ],
            [
              2.0,
              452.0,
              900.0,
              421.0,
              433.0
            ],
            [
              2.0,
              70.0,
              518.0,
              437.0,
              450.0
            ],
            [
              2.0,
              78.0,
              526.0,
              463.0,
              575.0
            ],
            [
              2.0,
              426.0,
              874.0,
              579.0,
              591.0
            ],
            [
              2.0,
              68.0,
              516.0,
              593.0,
              608.0
            ],
            [
              2.0,
              78.0,
              526.0,
              620.0,
              732.0
            ],
            [
              2.0,
              426.0,
              874.0,
              737.0,
              750.0
            ]
          ],
          "similarity": 0.33882067478185773,
          "term_similarity": 0.28122856444050054,
          "vector_similarity": 0.4732022655783578
        },
        {
          "chunk_id": "a3324e61f286c88b126b0ae6e8d763f4",
          "content_ltks": "②神戸市内での主な交通手段\n●神戸市内での主な交通手段としては、全市では昨年同様「车、バイク」(37.4%)が最も高く、次いで「 jr」( 30.5%)となっている。鉄道利用者(「市営地下鉄」「 jr」「坂急」「坂神」「山阳」の计)は 73.2%で、昨年( 52.5%)より 20.7ポイント高くなっている。●地区别にみると、『北野』で「市内観光用のループバス」(14.9%)が他の地区と比较して高くなっている。『西北神』では「车、バイク」が8割を超え、『六甲・摩耶』『有马』『须磨・舞子』では4割を超えている。『市街地』『神戸港』では「jr」が 3割を超え、他の地区と比较して高くなっている。\n 6 ",
          "content_with_weight": "②神戸市内での主な交通手段\n●神戸市内での主な交通手段としては、全市では昨年同様「車、バイク」(37.4%)が最も高く、次いで「JR」(30.5%)となっている。鉄道利用者(「市営地下鉄」「JR」「阪急」「阪神」「山陽」の計)は73.2%で、昨年(52.5%)より20.7ポイント高くなっている。●地区別にみると、『北野』で「市内観光用のループバス」(14.9%)が他の地区と比較して高くなっている。『西北神』では「車、バイク」が8割を超え、『六甲・摩耶』『有馬』『須磨・舞子』では4割を超えている。『市街地』『神戸港』では「JR」が3割を超え、他の地区と比較して高くなっている。\n6",
          "doc_id": "fafce9ce19fe11efa4600242c0a85006",
          "docnm_kwd": "r4_doukou.pdf",
          "img_id": "e741915419fa11efb4220242c0a85006-a3324e61f286c88b126b0ae6e8d763f4",
          "important_kwd": [],
          "kb_id": "e741915419fa11efb4220242c0a85006",
          "positions": [
            [
              7.0,
              74.0,
              520.0,
              70.0,
              82.0
            ],
            [
              7.0,
              80.0,
              527.0,
              95.0,
              215.0
            ],
            [
              7.0,
              295.0,
              742.0,
              808.0,
              814.0
            ]
          ],
          "similarity": 0.2953267731440791,
          "term_similarity": 0.23739374178801356,
          "vector_similarity": 0.43050384630823213
        },
        {
          "chunk_id": "78aa10dd0026c3129fe87efd1aa22092",
          "content_ltks": "ⅵ.消费额・割引制度の利用\n神戸市内での消费额の合计としては、全市では日帰り客が 9 , 99 4円、宿泊客が 40 , 92 3円となっており、全体の平均では16 , 84 8円となっている。いずれも昨年から増加している。消费额の内訳をみると、昨年と比较し、「买物费」が6 , 12 2円で、昨年( 5 , 38 4円)から増加している。地区别にみると、合计金额は『有马』が3万円を大きく超えて最も高い。次いで『北野』がこれに続く。项目别にみると、「宿泊费」「饮食费」は『有马』、「买物费」は『西北神』がそれぞれ最も高い。割引制度の利用としては、全市では「利用する(した)」が1割强で、昨年より 1割程度増加している。地区别にみると、「利用する(した)」は『有马』で3割强となっているが、他の地区は 2割未満となっている。\n<(10)( 11)参照> ",
          "content_with_weight": "Ⅵ.消費額・割引制度の利用\n神戸市内での消費額の合計としては、全市では日帰り客が9,994円、宿泊客が40,923円となっており、全体の平均では16,848円となっている。いずれも昨年から増加している。消費額の内訳をみると、昨年と比較し、「買物費」が6,122円で、昨年(5,384円)から増加している。地区別にみると、合計金額は『有馬』が3万円を大きく超えて最も高い。次いで『北野』がこれに続く。項目別にみると、「宿泊費」「飲食費」は『有馬』、「買物費」は『西北神』がそれぞれ最も高い。割引制度の利用としては、全市では「利用する(した)」が1割強で、昨年より1割程度増加している。地区別にみると、「利用する(した)」は『有馬』で3割強となっているが、他の地区は2割未満となっている。\n<(10)(11)参照>",
          "doc_id": "fafce9ce19fe11efa4600242c0a85006",
          "docnm_kwd": "r4_doukou.pdf",
          "img_id": "e741915419fa11efb4220242c0a85006-78aa10dd0026c3129fe87efd1aa22092",
          "important_kwd": [],
          "kb_id": "e741915419fa11efb4220242c0a85006",
          "positions": [
            [
              3.0,
              70.0,
              519.0,
              179.0,
              192.0
            ],
            [
              3.0,
              78.0,
              527.0,
              205.0,
              350.0
            ],
            [
              3.0,
              426.0,
              875.0,
              354.0,
              366.0
            ]
          ],
          "similarity": 0.2411197502603506,
          "term_similarity": 0.18217027321269116,
          "vector_similarity": 0.3786685300382226
        },
        {
          "chunk_id": "99d589b013b9f212606e558fe69a0cc6",
          "content_ltks": "10\n20\n30\n40(%)\n 10\n20\n30\n40(%)\n 0\n27.1\n产种类\n 19.2\n案内表示の充实·整备\n 21.2\n充寒\n 19.4\n18.3\n16.2\n宿泊施设の充实(格)\n地场产品の贩壳\n15.0\n20.0\n宿泊施设の充实\n 10.7\n地元\n 6.0\n8.9\n8.5\n7.8\n光情报の\n18.4\n宿泊施设の充寒(设)\n 7.4\n极的女凳信\n28.0\n市街地\n17.9\n多彩\n 26.6\n交通改善\n 18.3\n祭开催\n29.4\n市外\n 14.5\n6.0\nの他\n交通改善\n 15.1\n合和4年度(全市)\n今和3年度(全市) ",
          "content_with_weight": "10\n20\n30\n40 (%)\n10\n20\n30\n40 (%)\n0\n27.1\n產種類\n19.2\n案内表示の充实·整備\n21.2\n充寒\n19.4\n18.3\n16.2\n宿泊施設の充实(格)\n地場產品の贩壳\n15.0\n20.0\n宿泊施設の充实\n10.7\n地元\n6.0\n8.9\n8.5\n7.8\n光情報の\n18.4\n宿泊施設の充寒(設)\n7.4\n極的女凳信\n28.0\n市街地\n17.9\n多彩\n26.6\n交通改善\n18.3\n祭開催\n29.4\n市外\n14.5\n6.0\nの他\n交通改善\n15.1\n合和4年度(全市)\n今和3年度(全市)",
          "doc_id": "fafce9ce19fe11efa4600242c0a85006",
          "docnm_kwd": "r4_doukou.pdf",
          "img_id": "e741915419fa11efb4220242c0a85006-99d589b013b9f212606e558fe69a0cc6",
          "important_kwd": [],
          "kb_id": "e741915419fa11efb4220242c0a85006",
          "positions": [
            [
              21.0,
              66.0,
              541.0,
              483.0,
              804.0
            ]
          ],
          "similarity": 0.2021293997821564,
          "term_similarity": 0.12342926626228248,
          "vector_similarity": 0.3857630446618623
        }
      ],
      "doc_aggs": [
        {
          "count": 5,
          "doc_id": "fafce9ce19fe11efa4600242c0a85006",
          "doc_name": "r4_doukou.pdf"
        }
      ],
      "total": 5
    }
  },
  "retcode": 0,
  "retmsg": "success"
}

引用周りも含めてレスポンスが返ってくる。

ちなみに"stream":Trueを付与するとストリーミングでレスポンスが取得できる。

ただちょっとよくわからないのは、conversation_idがあるけど、メッセージの履歴はこちらで組み立てるっぽい。会話履歴の管理ってのをどうやってるのかまではわからない。

とりあえずドキュメントがないのでこのあたりは推測になるので果たしてあっているのかはわからない。

kun432kun432

所感

前提として 「日本語には正式にまだ対応していない」 ってところは残念。ただ、ざっと見た感じ、言語がキーになるのはとりあえずOCRの部分なんじゃないかなと思う。普通にテキストとしてパースできているものもあったし、ベクトル検索に入れてしまえば言語あまり関係ないと思うし。

Vectara試してみたときにも思ったけど、RAGを作るだけではもはやウリにはならなくなりつつあり、フォーカスが「RAGを◯◯◯に作れる」ってところに移っている。RAGFlowの強みとしては、やはりOCRでの解析≒ドキュメントを正確に理解するってところと、それを生かした引用の付与ってところなんだろうな。

作らずに利用するというオプションはもっと増えるべきだと思うし、そういう中で競争があるのは望ましい。

kun432kun432

軽く試してみた。v0.12.0。

https://x.com/kun432/status/1844640991447482475

https://x.com/kun432/status/1844641551038939577

あと、マインドマップ的なものも作られる。

自分は"GraphRAG"はMSの独自実装だと思っていて、単にナレッジグラフを使っただけのRAG、"Graph"な"RAG"、とは別物だと思っている。単にナレッジグラフ使うだけなら以前にも試していて、それだけで精度が上がるわけではないと思っている。

https://zenn.dev/kun432/scraps/189e19674125ce#comment-4265fb2ee007b4

で、以下を読む限りは、RAGFlowはGraphRAGを実装しようとしてるように思える(必ずしも同じではないにせよ)

https://ragflow.io/blog/ragflow-support-graphrag

ただチャットで試してみた限りはそれほど変化が見られるような感は感じなかったし、あと引用がイマイチなんだよね。

以前のOCRした部分を引用で出してくれてるやつの方がピンポイントで提示してくれるので納得できる感がある。

このスクラップは6ヶ月前にクローズされました