見出し画像

[UI]Chainlitで専門家AIと会話する_Local-LLM+Document Summary Index

LLMのUIにはtext-generation-webuiをはじめ様々なものがありますが、今回はChainlit(GitHub)に下記の記事と同じ方法で作成したindexを使ってLocal-LLMに回答してもらうChat-UIを作成します。

クラウドや高性能PCで作成したindexをそれほど高性能でない別のPC内で活用することができます。ほかのユーザーに使用してもらう際にUIはユーザーの認知容易性の面でメリットがあります。


0. 環境

OS:Windows
CPU:Intel(R) Core i9-13900KF
RAM:128GB
GPU:RTX 4090

1. 知識の収集・格納

今回はarXivで取得したPDFをフォルダに格納しました。
検索した単語は"NLP"(自然言語処理)です。論文数は91件です。

2. PDF ⇒ Document Summary Index

Document summary indexを構築します。

# フォルダのパス
path = r".\NLP" 

# データの読込み
from llama_index.node_parser import SimpleNodeParser
from llama_index import (
    SimpleDirectoryReader,
    ServiceContext,
    get_response_synthesizer,
)
from llama_index.indices.document_summary import DocumentSummaryIndex

documents = SimpleDirectoryReader(path).load_data()
response_synthesizer = get_response_synthesizer(
    response_mode="tree_summarize", use_async=True
)
doc_summary_index = DocumentSummaryIndex.from_documents(
    documents,
    response_synthesizer=response_synthesizer,
    show_progress=True,
)

作成したindexを保存します。

doc_summary_index.storage_context.persist("index")

3. Chainlitで使用するpyファイルを作成

下記のpyファイル、例えば app_nlp.py というファイル名で作成します。
LLMのモデルはHuggingFaceH4/zephyr-7b-betaです。

import os
import torch
from llama_index import (
    ServiceContext,
    StorageContext,
    load_index_from_storage
)
from llama_index.llms import HuggingFaceLLM
import chainlit as cl

## 使用するLLMを設定、使用するIndexの読込
@cl.cache
def load_context():
    llm = HuggingFaceLLM(
        model_name="HuggingFaceH4/zephyr-7b-beta",
        tokenizer_name="HuggingFaceH4/zephyr-7b-beta",
        model_kwargs={"torch_dtype": torch.bfloat16},
        generate_kwargs={"temperature": 0.1, "do_sample":True,},
        device_map="auto",
    )

    service_context = ServiceContext.from_defaults(llm=llm, chunk_size=1024)
    # Rebuild the storage context
    storage_context = StorageContext.from_defaults(persist_dir="./NLP/index")
    # Load the index
    index = load_index_from_storage(storage_context, service_context=service_context)
    return index

## query engineの設定
@cl.on_chat_start
async def start():
    index = load_context()

    query_engine = index.as_query_engine(response_mode="tree_summarize", use_async=True,)

    cl.user_session.set("query_engine", query_engine)
    
    await cl.Message(author="Assistant", content="Hello ! How may I help you ? ").send()

## 返答をユーザーに返す
@cl.on_message
async def main(message: str):
    query_engine = cl.user_session.get("query_engine")  # type: RetrieverQueryEngine
    response = await cl.make_async(query_engine.query)(message.content)
    response_message = cl.Message(content="")
    response_message.content = response.response

    await response_message.send()

4. 作成したpyファイルをChainlitで使用する

$ chainlit run app_nlp.py 

5. 質疑例

[User]
What are some examples of LLM innovations used in healthcare?
[Chatbot]
1.CHiLL: Crafting High-Level Latents - This approach allows domain experts to define high-level queries in natural language, infer the response automatically by prompting an LLM using these queries, and then define small linear models over the resulting features. This enables one to capitalize on LLMs while still building models that provide interpretability.
2. Clinical BERT - This is a deep neural network that operates over dense learned embeddings for clinical text. It is used for tasks such as clinical question answering, clinical named entity recognition, and clinical text classification.
3. GPT-3 - This is a large-scale language model that can generate human-like text. It has been used in healthcare for tasks such as medical diagnosis and drug discovery.
4. BERT-based models for COVID-19 diagnosis - These models use BERT to extract features from clinical text and then use a classifier to predict whether a patient has COVID-19 or not.
5. LLM-based models for medical image interpretation - These models use LLMs to generate high-level features from medical images and then use a classifier to predict the diagnosis.
These innovations demonstrate the potential of LLMs in healthcare for tasks such as…

翻訳

[ユーザー]
ヘルスケアで使用されているLLMの革新的な例にはどのようなものがありますか?
[チャットボット]
1.CHiLL: Crafting High-Level Latents - このアプローチでは、ドメインの専門家が自然言語で高レベルのクエリを定義し、これらのクエリを使用してLLMをプロンプトすることによって自動的に応答を推測し、その結果得られた特徴量に対して小さな線形モデルを定義することができます。これにより、解釈可能なモデルを構築しながら、LLMを活用することができる。
2. Clinical BERT - これは、臨床テキストの密な学習埋め込み上で動作するディープニューラルネットワークです。臨床質問応答、臨床名前付きエンティティ認識、臨床テキスト分類などのタスクに使用される。
3. GPT-3 - 人間のようなテキストを生成できる大規模言語モデル。医療診断や創薬などのタスクに使用されている。
4. COVID-19診断のためのBERTベースのモデル - このモデルは、BERTを使用して臨床テキストから特徴を抽出し、分類器を使用して患者がCOVID-19であるかどうかを予測します。
5. 医療画像解釈のためのLLMベースのモデル - これらのモデルは、LLMを使用して医療画像から高レベルの特徴を生成し、分類器を使用して診断を予測します。
これらのイノベーションは、医療におけるLLMの可能性を示しています。

6. まとめ

非常に手軽にLlamaindexやLangchainを組み込めるChainlitは本当に素敵ですね。Chat-GPTがこれほど認知が広がったのは、その素晴らしいコンテンツだけではなく、UIのおかげも大きいと思います。UIの力、侮れません。

この記事が気に入ったらサポートをしてみませんか?