SageMakerのインスタンスタイプml.g4dn.2xlarge
conda init
source ~/.bashrc
conda create --name langchain-hf -y
conda activate langchain-hf
conda install pip ipykernel ipywidgets -y
export CURRENT_ENV_NAME=$(conda info | grep "active environment" | cut -d : -f 2 | tr -d ' ')
python3 -m ipykernel install --user --name $CURRENT_ENV_NAME --display-name "user-env:($CURRENT_ENV_NAME)"
ブラウザをリロード
ここからはノートブックで実行します。
%conda install -y accelerate pytorch transformers huggingface_hub pytorch-cuda=12.4 -c pytorch -c nvidia
%pip install langchain langchain-huggingface
from huggingface_hub import login
login()
ログイン画面が表示されるのでトークンを入力します。
import torch
from langchain_huggingface.llms import HuggingFacePipeline
llm = HuggingFacePipeline.from_model_id(
model_id="google/gemma-2-2b-jpn-it",
task="text-generation",
pipeline_kwargs={"max_new_tokens": 2048},
model_kwargs={"torch_dtype": torch.bfloat16},
device=0, # -1 for CPU
)
llm.invoke("日本について知っていることを教えて下さい。")
'日本について知っていることを教えて下さい。\n\n基本的な情報\n\n* 国名: 日本\n* 首都: 東京\n* 国旗: 赤と白の旗\n* 国土: 約377,975平方キロメートル\n* 人口: 約1億2,400万人\n* 言語: 日本語\n* 通貨: 日本円\n\n歴史・文化\n\n* 歴史: 古代から近代まで、長い歴史を持つ\n* 文化: 伝統的な文化、芸術、音楽、食文化など、多様性と奥深さがある\n* 伝統文化: 茶道、書道、歌舞伎など、世界的に有名な伝統文化がある\n* 芸術: 日本の芸術は、絵画、彫刻、陶芸など、世界的に高い評価を得ている\n\n経済・社会\n\n* 経済: 世界第3位の経済規模を持つ\n* 社会: 高度な社会制度を持つ\n* 教育: 世界トップレベルの教育制度を持つ\n\n自然\n\n* 自然: 山、海、湖など、豊かな自然環境を持つ\n* 気候: 四季折々の気候\n* 観光地: 富士山、京都、大阪など、世界的に有名な観光地がある\n\n\n \n\n\n \n'
チャットモデルの場合
chat = ChatHuggingFace(llm=llm)
chat.invoke("日本について知っていることを教えて下さい。")
AIMessage(content='user\n日本について知っていることを教えて下さい。\nmodel\n## 日本について知りたいこと、教えてください!😊\n\n日本について、どんなことを知りたいですか?\n\n例えば…\n\n歴史・文化方面:\n\n* 日本の歴史について知りたい\n* 日本の伝統文化について知りたい\n* 日本の芸術や文化について知りたい\n* 日本の伝統芸能について知りたい\n* 日本の宗教について知りたい\n\n地理・自然方面:\n\n* 日本の地理について知りたい\n* 日本の気候について知りたい\n* 日本の自然景観について知りたい\n* 日本の山岳地帯について知りたい\n* 日本の海について知りたい\n\n経済・社会方面:\n\n* 日本の経済について知りたい\n* 日本の社会制度について知りたい\n* 日本の教育制度について知りたい\n* 日本の生活習慣について知りたい\n* 日本の政治について知りたい\n\nその他:\n\n* 日本のアニメや漫画について知りたい\n* 日本の食べ物について知りたい\n* 日本のファッションについて知りたい\n* 日本の音楽について知りたい\n* 日本の映画について知りたい\n\n\n\n \n \n \n\n\n \n', additional_kwargs={}, response_metadata={}, id='run-6a563ad3-7e87-4a8c-92dc-6a8d9f50ae62-0')
トークンの区切り文字を取り除くにはskip_prompt=True
を指定します。
chat2 = chat.bind(skip_prompt=True)
chat2.invoke("日本について知っていることを教えて下さい。")
AIMessage(content='## 日本について知りたいこと、教えてください!😊\n\n日本について、どんなことを知りたいですか?\n\n例えば…\n\n歴史・文化方面:\n\n* 日本の歴史について知りたい\n* 日本の伝統文化について知りたい\n* 日本の芸術や文化について知りたい\n* 日本の伝統芸能について知りたい\n* 日本の宗教について知りたい\n\n地理・自然方面:\n\n* 日本の地理について知りたい\n* 日本の気候について知りたい\n* 日本の自然景観について知りたい\n* 日本の山岳地帯について知りたい\n* 日本の海について知りたい\n\n経済・社会方面:\n\n* 日本の経済について知りたい\n* 日本の社会制度について知りたい\n* 日本の教育制度について知りたい\n* 日本の生活習慣について知りたい\n* 日本の政治について知りたい\n\nその他:\n\n* 日本のアニメや漫画について知りたい\n* 日本の食べ物について知りたい\n* 日本のファッションについて知りたい\n* 日本の音楽について知りたい\n* 日本の映画について知りたい\n\n\n\n \n \n \n\n\n \n', additional_kwargs={}, response_metadata={}, id='run-cbb7c55f-ab4c-4805-9d7f-a33532a10630-0')
Streamingは動作するのですが、1つのチャンクになってしまいました。モデルによるのかたまたまなのかは確認できていません。
for chunk in chat2.stream("日本の文化や歴史について長文で回答してください。"):
print(chunk)
content='## 日本の文化と歴史:複雑で多様な魅力\n\n日本の文化と歴史は、長い歴史と多様な文化要素によって、世界的に知られている複雑で魅力的なものです。その歴史は、古代から現代まで、様々な時代と文化が交錯し、独自の文化を形成してきました。\n\n古代から中世:神道と仏教の融合\n\n* 古代: 日本は紀元前5世紀から、独自の文化を形成し始めました。稲作の普及と、独自の宗教体系である神道が発展しました。神道は自然と人間の関係を重視し、神々を祭祀する儀式や信仰が中心でした。\n* 中世: 7世紀に仏教が日本に伝来し、仏教文化が発展しました。仏教は、日本社会に大きな影響を与え、寺院や仏像、禅宗などの文化が発展しました。\n* 平安時代: 平安時代は、政治的安定と文化の繁栄の時代でした。貴族社会が中心となり、芸術、文学、建築など、様々な分野で優れた作品が生まれた時代です。\n\n江戸時代:武士と文化の成熟\n\n* 江戸時代: 戦国時代から続く武士社会が中心となり、武士の文化が発展しました。武士の倫理観や武道の精神が社会に根付いていました。同時に、茶道、書道、歌道などの文化が発展しました。\n* 江戸幕府の時代: 江戸幕府の時代は、日本社会の安定と発展の時代でした。文化的な交流が活発になり、新しい芸術や技術が生まれてきました。\n\n明治維新から現代:近代化と文化の多様性\n\n* 明治維新: 明治維新によって、日本は近代化の道を歩み始めました。新しい政治体制と経済システムが導入され、近代的な文化が導入されました。\n* 現代: 現代日本は、高度経済成長期を経て、世界的な経済力を持つ国となりました。一方で、伝統的な文化や宗教は、現代社会にも根強く存在し、多様な文化が融合しています。\n\n日本の文化の特徴\n\n* 伝統と現代の融合: 日本の文化は、伝統と現代の要素が複雑に融合したものです。伝統的な文化は、現代社会にも受け入れられ、現代の文化と融合しています。\n* 美意識と芸術性: 日本の文化は、芸術性と美意識に特徴があります。伝統的な芸術や文化は、現代の芸術にも影響を与えています。\n* 宗教と信仰: 日本の文化には、神道、仏教、キリスト教など、様々な宗教が存在します。宗教は、日本の社会生活に深く根ざしています。\n* 伝統的な価値観: 日本の文化には、家族や社会の秩序、敬意、誠実さなどの伝統的な価値観があります。\n\n\n日本の文化と歴史は、複雑で多様な要素によって形成されています。その歴史は、日本人の精神性や価値観を反映しており、現代でもその影響は世界に広がっています。\n\n\n\n' additional_kwargs={} response_metadata={} id='run-c41e1803-fa80-4e6b-8596-70e3e5033c61-0'
ツールも試しましたが、うまくいきませんでした。
%pip install -qU duckduckgo-search langchain-community
from langchain_community.tools import DuckDuckGoSearchResults
search = DuckDuckGoSearchResults()
chat3 = chat2.bind_tools([search]).bind(skip_prompt=True)
chat3.invoke("Webで Amazon を検索してください")
AIMessage(content='申し訳ありませんが、私はウェブブラウザを操作できません。 \n\n代わりに、Amazonのウェブサイトにアクセスするためのリンクを以下に示します。\n\nhttps://www.amazon.co.jp/ \n\n\n\n', additional_kwargs={}, response_metadata={}, id='run-520848a0-0414-4c91-a072-7684c5d2f522-0')