ここ数カ月で確立された生成型 AI サービスの洪水のおかげで、大規模言語モデル(LLM) に基づくチャットボットや Web サイトがほぼどこにでも普及しています。ただし、ソフトウェア開発者は、目的の目標を達成するために自分で作業を行うことを好みます。アプリケーションが期待どおりに実行されたときに得られる満足感に加えて、直接プログラミング作業により、アプリケーションの設計と機能を必要に応じて最適化する機会も得られます。

このチュートリアルでは、開発者が生成人工知能(AI) を使い始めるのに役立つ 6 つのPythonコーディング プロジェクトを紹介します。

1. Llama 2、Streamlit、Replicate でチャットボットを作成する

OpenAI の GPT 3.5 または 4 に依存せずにチャットボットを実行したい場合は、Meta の Llama 2 言語モデルと Streamlit Web フレームワークを組み合わせることで簡単に実行できます。 Streamlit の上級開発者アドボケートである Chanin Nantasenamat が、 GitHub リポジトリYouTube ビデオ、およびブログ投稿でこれがどのように機能するかを詳しく示しています。

このプロジェクトを実装するには、 Replicateアカウント (GitHub アカウントでのログインが可能) と API トークンが必要です。小規模なタスクで時々 Replicate を使用するだけであれば、無料オファーで十分です。大規模なモデルや多くのクエリが使用される場合、状況は異なって見えます。無料の Replicate アカウントには標準 API トークンが付属している必要があります。そうでない場合は、新しいものを生成できます。

プロジェクトのセットアップ

まず、Git を使用してコードをローカルにダウンロードします。これは次のコマンドで機能します。

git clone https://github.com/dataprofessor/llama2.git

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

Git を使用しない場合は、 GitHub 経由でデータを含む zip アーカイブをダウンロードし、ローカル コンピューターで解凍することもできます。作業ディレクトリをプロジェクト フォルダーに合わせた後、 venv使用して Python 仮想環境を作成できます (これには任意のツールを使用できます)。

python -m venv env

次に、次のコマンドを使用してこの環境をアクティブ化します。

  • source env/bin/activate (Mac) または

  • envScriptsactivate (Windows)。

次のステップは、必要なパッケージをインストールすることです。これを行うには、次を使用します。

pip install -r requirements.txt

API キーを使用して Streamlit ファイルをローカルで実行するには、ドキュメントでは、メイン プロジェクト ディレクトリの下の .streamlit ディレクトリにあるsecrets.tomlファイルにファイルを保存することを推奨しています。 gitを使用する場合は、 .streamlit/secrets.tomlファイルを.gitignoreファイルに追加する必要があります。 secrets.toml次のような形式になっている必要があります。

REPLICATE_API_TOKEN = "your_replicate_token"

これは、ユーザーがトークンを使用してリクエストを行う場合に機能します。アプリケーションをローカルで実行してみることもできます。こうすることで、ユーザーが自分のキーを入力する必要がある場合に何が起こるかを確認できます。私たちの Mac では、アプリケーションはsecrets.tomlがないと実行できません。これは、 REPLICATE_API_TOKENの値を設定せず、 secrets.tomlに小さな追加を追加することで修正できます。

FAKE_TOKEN = "some fake token"

したがって、次のターミナル コマンドを使用して、Streamlit アプリをローカルで実行できるようになります。

streamlit run streamlit_app_v2.py

アプリケーションを Web 上にデプロイする場合、無料のStreamlit Community Cloudアカウントは、これを実現するための最も簡単なオプションの 1 つです。 GitHub アカウントからアプリケーションを直接デプロイできるようになります。 セットアップ展開については、詳細な手順を参照してください。 Replicate API の露骨なコストを回避するには、必ず GitHub リポジトリを「プライベート」に設定するか、ユーザーに独自の API キーを使用するように依頼する必要があります。

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

Streamlit アプリケーションを共有するもう 1 つの簡単なオプションは、 Hugging Face Streamlit Spaces経由でアプリケーションを展開することです。 Dockerユーザーの場合は、Brian Hess (Snowflake のフィールド CTO および Amazon Web Services の分析スペシャリスト) によって開発されたDockerize ツールをお勧めします。

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

2. Matplotlib、Streamlit、OpenAI を使用してデータを視覚化する

次のチュートリアルでは、.csv ファイルをアップロードし、それらについて質問できるアプリケーションについて説明します。その代わりに、Matplotlib で生成されたチャートが返されます。アプリを実装するには、OpenAI API キーが必要です。下のボタンをクリックすると、アカウントを作成できます。

OpenAIアカウントへ

プロジェクトのセットアップ

完了したら、次のコマンドを使用してリポジトリの Git クローンを作成します。

git clone https://github.com/michaelweiss/chat-with-your-data.git

次に、プロジェクト ディレクトリに移動し、仮想 Python 環境を作成してアクティブ化します (前のプロジェクトを参照)。アプリケーションをローカルで実行している場合は、次のコマンドを使用して OpenAI キーを設定します。

export OPENAI_API_KEY="your_open_ai_key"

次に、必要なパッケージをインストールします。

pip install openai pandas streamlit matplotlib

最後に、次のようにしてアプリケーションを実行します。

streamlit run chat_data.py

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

大規模言語モデルがクエリから使用可能な Python コードを生成するには、出力に上記のスクリーンショットのような図が含まれている必要があります。すべての LLM 駆動アプリケーションと同様に、コードが適切に動作するようにプロンプ​​トを最適化する必要がある場合があります。

プロジェクト作成者 Michael Weiss はMIT オープンソース ライセンスに基づいてリポジトリをリリースしているため、どのような目的でも使用または変更することができます。

3. OpenAI、LangChain、Chainlit を使用してドキュメントをクエリする

この Python プロジェクトを使用すると、テキスト ドキュメントをアップロードし、その内容について質問する簡単なアプリを作成できます。このアプリケーションは、たとえば、新しく受信した文書の 1 回限りの要約をできるだけ早く作成する場合に適しています。あるいは、この機会を他の人にも利用できるようにするためです。

このプロジェクトでは、LLM を利用したチャット アプリケーション用に特別に設計された、比較的新しいChainlitフレームワークを使用します。ドキュメントをアプリにアップロードするたびに、ドキュメントは大規模な言語モデルによって処理されます。これにより、文書がその意味を表す数値に変換されます。今後、ドキュメントを複数回クエリする場合 (ソフトウェア ドキュメントなど)、このアプリケーションは効率的ではありません。このシナリオでは、後で使用できるように入力を保存する次のプロジェクトをお勧めします。

プロジェクトのセットアップ

このアプリケーションには (アクティブ化された) 仮想 Python 環境も必要です。別の LLM を使用するようにソース コードを変更しない限り、OpenAI API キーも必要になります。要件が満たされている場合は、必要なパッケージをインストールします。

pip install python-dotenv langchain chromadb tiktoken chainlit openai

次のステップでは、Chainlit からサンプル コードをコピーします。これには、下のボタンをクリックしてアクセスできます。

Chainlit コード例に移動します

次に、OpenAI キーを入力するか、別のより安全な方法でコードを更新してキーをロードします。たとえば、 python-dotenvライブラリと.envファイルを使用します。

Chainlit にはいくつかの特別な機能があります。デフォルトの Web アプリケーションには、ユーザーの質問に答えるために LLM が実行する手順と最終的な答えが表示されます。さらに、フレームワークにはチャットボットに焦点を当てたデコレータもあります。

  • @cl.on_messageユーザーが質問を入力したときに実行する必要があるすべてのものを指定します。

  • @cl.on_chat_startアプリの起動時に実行されるコードを担当します。

次のターミナル コマンドはアプリケーションを起動します (ローカルホスト上のブラウザで開く必要があります)。

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

chainlit run -w qa.py

-w引数を指定すると、基礎となるapp.pyファイルが更新され保存されるたびに、アプリが自動的に再読み込みされます。

アプリケーションを実行すると、Chainlit はプロジェクト ディレクトリに新しいchainlit.mdファイルを作成します (まだ存在しない場合)。このファイルはアプリケーションの Readme タブに表示され、必要に応じて編集できます。さらに、アプリケーションの出力には、関連するソースドキュメントへのリンクも含まれています。こうすることで、答えが正しいかどうかを直接確認できます。

LangChain に精通している場合は、アプリケーションのコードを更新してファイル タイプのオプションを追加することもできます。 .pdf ファイルなど、いくつかの追加のLangChain ドキュメント ローダーをお勧めします。

Chainlit はまだ比較的新しいため、運用アプリケーションには推奨されません。ただし、単純で生成的なチャット インターフェイスを簡単にプログラムする方法を探しているだけであれば、このフレームワークは一見の価値があります。 Chainlit Cookbook Repositoryには、他にも数十のテスト対象アプリケーションがあります。

Chainlit アプリケーションを共有するためのクラウド サービスがまもなく利用可能になります。現時点では、導入に関する推奨事項は、いくつかのチュートリアル (たとえば、このYouTube ビデオ )に限定されています。

4. LangChain、OpenAI、Gradio を使用してドキュメントをクエリする

このセクションで説明するチャットボット アプリケーションでは、複数のドキュメントを処理および保存できます。その後、LLM はこの入力のみに基づいてユーザーの質問に回答します。この方法は、検索拡張生成(RAG) とも呼ばれます。

このアプリケーションのコードは、 LangChain の作成者である Harrison Chase の GitHub リポジトリから取得されており、デフォルトで、2022 年の米国政府の「一般教書」演説を含むテキスト ファイルが含まれています。開始するには、コードのクローンを作成します (または、下のボタンをクリックしてダウンロードします:

コードをダウンロードするには

プロジェクトのセットアップ

次に、前のプロジェクトと同様に、仮想 Python 環境をセットアップし、 プロジェクトの README ファイルの手順 0、1、2 に従います。これで、次のコマンドを使用して、デフォルトのテキストを使用して Gradio Web アプリケーションをローカルで起動できるようになります。

python app.py

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

Gradio は、データ サイエンスを目的として設計された Web フレームワークであり、ストリーミングチャットボット用の機能が組み込まれています。 Gradio は使いやすさとカスタマイズ性のバランスが取れており、そのドキュメントは充実しているだけでなく、理解しやすいものでもあります。 Gradio UI に加えて、アプリにはドキュメントをクエリするためのコマンド ライン アプリケーションもあります。

python cli_app.py

デフォルトのアプリケーションが起動したら、選択したドキュメントを使用してカスタマイズできます。これを実装する 1 つの方法は、次の 5 つの手順を実行することです。

vectorstore.pklファイルとstate_of_the_union.txtファイルを削除します。

2. docs フォルダーを作成し、そこにクエリする 1 つ以上のドキュメントを置きます。ここでは、Samuel Bowman 著の PDF ファイル「 大規模言語モデルについて知っておくべき 8 つのこと」および Nvidia の「 大規模言語モデルの初心者ガイド」を使用しました。

3. ingest_data_.pyファイル内で、次の行 ( print("Loading data....") ) の直後の 9 行と 10 行) を変更します。

loader = UnstructuredFileLoader("state_of_the_union.txt")

raw_documents = loader.load()

raw_documents = []

for file in os.listdir('docs'):

if file.endswith('.pdf'):

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

pdf_path = './docs/' + file

loader = PyPDFLoader(pdf_path)

raw_documents.extend(loader.load())

elif file.endswith('.docx') or file.endswith('.doc'):

doc_path = './docs/' + file

loader = Docx2txtLoader(doc_path)

raw_documents.extend(loader.load())

elif file.endswith('.txt'):

doc_path = './docs/' + file

loader = TextLoader(doc_path)

raw_documents.extend(loader.load())

ファイルの先頭にも次のように追加します。

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

import os

from langchain.document_loaders import PyPDFLoader, Docx2txtLoader

from langchain.document_loaders import TextLoader

4. query_data.pyドキュメントがカバーするトピックを反映するように、「最新の組合の状況」または「組合の最新の状態」という各語句を変更します。

5. app.pyのタイトル (57 行目) も変更する必要があります。元のコード:

"

Chat-Your-Data (一般教書)

ここでも、取り上げたいトピックを入力します。また、71 行目のプレースホルダー テキストと 78 行目から始まる例も変更します。PDF ファイルも使用する場合は、 pypdfライブラリもインストールする必要があります。これは次のコマンドで機能します。

pip install pypdf

次に、 python ingest_data.pyを再度実行し、 python app.pyでアプリケーションを起動します。

Gradio アプリケーションを Hugging Face Spaces にデプロイするのは簡単です。 API キーを使用して公開サイトでアプリケーションにアクセスできるようにすることは避けてください。オプションの 1 つは、単純なパスワード保護を追加することです。これを行うには、次のコードを編集します。

gr.ChatInterface(predict).queue().launch()

次のようになります:

生成 AI コーディング チュートリアル: GenAI を始めるための 6 つの Python プロジェクト

gr.ChatInterface(predict).queue().launch(auth=("theUserName", "thePassword"))

Hugging Face 以外にも、クラウド サービス経由やDockerコンテナーなどのデプロイメント オプションもあります。

5. LangChain、OpenAI、FastAPI を使用した LLM ベースの Web リサーチ

GPT Researcherプロジェクトは、イスラエルのウェブホスト Wix の研究開発責任者である Assaf Elovic 氏によるものです。結果として得られるアプリケーションは、LLM プロジェクト用に特別に設計された Tavily 検索エンジンを使用します。現在は無料ですが、担当者によると、入力はモデルとアルゴリズムを最適化するために使用されるとのことです。

プロジェクトのセットアップ

公式README ファイルの形式で、高品質のステップバイステップのインストール ガイドが提供されています。 ビデオチュートリアルも利用できます。重要: このプロジェクトを実行するには、少なくとも Python バージョン 3.11 が必要です。他の Python ディストリビューションも使用する場合は、必ず正しいバージョンで仮想環境を作成し、アクティブ化してください。

次に、必要なパッケージをインストールします。

pip install -r requirements.txt

次に、 .envファイルを作成し、次のように OpenAI API キーを追加します。

OPENAI_API_KEY="your-key-here"

次に、次のようにしてアプリケーションを起動します。

uvicorn main:app -reload

ブラウザ ( https://localhost:8000 ) に開始画面が表示され、「開始」ボタンをクリックして開始できます。クエリを入力すると、エージェントは複数のソースを検索し、レポートを生成します。後者のコンパイルには時間がかかります。このアプリには、レポートにソース リンクも含まれているという利点があります。

最近の出来事のため、私たちは LLM チャットボットに、キツツキが本能に従わないようにする方法を尋ねました。

クエリの結果は、概要、序文、いくつかのトピックセクション (「非致死的抑止方法」や「積極的なピッキング対策」など)、および結論と参考文献を含む、このテーマに関する詳細な論文でした。質問に答えるレポートに加えて、主要なリソースに関するさまざまな詳細を提供するソース レポートを要求することもできます。

さらに、GPT Researcher が使用する LLM を変更することもできます。ただし、OpenAI のモデルがこのタスクに最適であると考えられているため、これはお勧めできません。 GPT Researcher をローカルで実行する機能に加えて、 Docker コンテナーで GPT Researcher を実行するためのガイドもあります。

6. LlamaIndex、SQLAlchemy、OpenAI を使用して NLP から SQL へ

テキストを SQL に変換するにはさまざまな方法があります。 1 つは、Llamaindex と SQLAlchemy を使用するこのサンプル プロジェクトに関するものです。前者は、LLM アプリケーションをデータで強化するために開発されました。 SQLAlchemy は、Python データベース用のツールキットです。重要: このプロジェクトには Web フロントエンドが含まれておらず、コマンド ライン経由で実行されます。 Python コードに関しては、主にLlamaindex のサンプル ノートブックを使用しました。

プロジェクトのセットアップ

最初の 5 つのプロジェクトと同様に、まず新しいディレクトリを作成し、仮想 Python 環境を作成してアクティブ化してから、必要なパッケージをインストールする必要があります。

pip install openai sqlalchemy llama-index

OpenAI を使用したくない場合は、LlamaIndex が他の LLM API オプションを提供します。 標準 LLM をローカルで実行することもできます。サンプル ノートブックでは、API キーをメイン ファイルに明示的に保存します。これは Git リポジトリの一部であるため、GitHub でキーを公開したくない場合には不便です。代わりに、次のことをお勧めします。

pip install python-dotenv

次に、 .envファイルを作成します。

OPENAI_API_KEY="my_api_key"

次に、次のコードを新しいapp.pyスクリプトに貼り付けます。

import os

import openai

from dotenv import load_dotenv

load_dotenv()

openai.api_key = os.getenv("OPENAI_API_KEY")

次のステップでは、サンプル コードの一部をapp.pyスクリプトに貼り付けました。

from llama_index.indices.struct_store.sql_query import NLSQLTableQueryEngine

from sqlalchemy import text

from sqlalchemy import insert

from llama_index.llms import OpenAI

from llama_index import SQLDatabase, ServiceContext

from sqlalchemy import (

create_engine,

MetaData,

Table,

Column,

String,

Integer,

select,

)

# Create a sample database and table

engine = create_engine("sqlite:///:memory:")

metadata_obj = MetaData()

table_name = "city_stats"

city_stats_table = Table(

table_name,

metadata_obj,

Column("city_name", String(16), primary_key=True),

Column("population", Integer),

Column("country", String(16), nullable=False),

)

metadata_obj.create_all(engine)

# Set up an LLM

llm = OpenAI(temperature=0.1, model="gpt-3.5-turbo")

service_context = ServiceContext.from_defaults(llm=llm)

# Create a database object from that table that sqlalchemy can use

sql_database = SQLDatabase(engine, include_tables=["city_stats"])

# Add some sample data to the table

sql_database = SQLDatabase(engine, include_tables=["city_stats"])

rows = [

{"city_name": "Toronto", "population": 2930000, "country": "Canada"},

{"city_name": "Tokyo", "population": 13960000, "country": "Japan"},

{"city_name": "Chicago", "population": 2679000, "country": "United States"},

{"city_name": "Seoul", "population": 9776000, "country": "South Korea"},

]

for row in rows:

stmt = insert(city_stats_table).values(**row)

with engine.begin() as connection:

cursor = connection.execute(stmt)

# Check to see if the table exists and is usable

stmt = select(

city_stats_table.c.city_name,

city_stats_table.c.population,

city_stats_table.c.country,

).select_from(city_stats_table)

with engine.connect() as connection:

results = connection.execute(stmt).fetchall()

print(results)

# Try running a basic SQL query on this table using sqlalchemy

with engine.connect() as con:

rows = con.execute(text("SELECT city_name, country from city_stats"))

for row in rows:

print(row)

# At last! Time to try a natural language query

query_engine = NLSQLTableQueryEngine(

sql_database=sql_database,

tables=["city_stats"],

)

query_str = "Which city has the largest population, and what is that population??"

response = query_engine.query(query_str)

print(f"Answer: {response}")

# You can also see the query in the sqlalchemy metadata

print("Generated from the following SQL:")

print(response.metadata["sql_query"])

ニーズに合わせてクエリとデータをカスタマイズした後、単純なpython app.pyターミナル コマンドを使用してアプリケーションを実行できるようになりました。

その他の GenAI Python プロジェクト

Python でより生成的な AI プロジェクトに取り組みたい場合は、次のオンライン リソースを参照する価値があります。

(FM)

この投稿は、米国の姉妹誌 Infoworld の記事に基づいています。