はじめに
URLを入力したらそこから情報を自動で抽出してくれるツールとか作れたら便利そうだと思い、色々調べています。それにあたり、この記事ではOllamaとFirecrawlについて説明します。Colabで簡単に動かしてみたので、この記事で紹介します。また、Ollamaを呼び出すためにLiteLLMを使っており、以下で説明していきます。
Ollamaについて
以下の記事を参考にさせていただきました。
Ollamaはローカル環境でLLMを使用でき、プライバシーに関する懸念がなくなります。
また、Llama 3,Gemma など、様々なオープンソースモデルをOllamaの公式ライブラリでサポートしており、簡単に利用できます。さらに、Ollamaの公式ライブラリに登録していないものでも、Hugging Faceに置かれていれば簡単に利用できます。
LiteLLMについて
以下の記事を参考にさせていただきました。
LLMに関するライブラリとしては、例えばLangChainが有名ですが、LiteLLMはLangChainほど様々な機能は搭載していないものの、LLMの呼び出しの部分に特化しているようなイメージです。
Litellmを使えば、OpenAI APIのフォーマットで、様々なプロパイダーのLLM APIを呼び出せるようになります。
Firecrawlについて
以下の記事を参考にさせていただきました。
Firecrawlは、Webサイトのデータを効率的にクローリングし、必要な情報を抽出するためのツールです。
指定されたURLから始まり、Webサイト全体をクローリングした上で、データをLLM向けのMarkdownや構造化データに変換する機能を持っています。
また、FirecrawlはPython SDKを使用して簡単にFirecrawl APIと連携することができます。
Colabで試してみた
この記事ではColabでOllamaを動かす、FirecrawlでWebサイトの情報を抽出させる、Ollamaでそれを要約させるところまで試してみます。
まずはColabでOllamaを使えるようにします。以下記事を参考にさせていただきました。
以下を実行し、Ollamaのインストールとcudaドライバーのインストールをします。
!curl https://ollama.ai/install.sh | sh
!echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
!sudo apt-get update && sudo apt-get install -y cuda-drivers
次に、Ollamaサーバーの起動とモデルをダウンロードします。
今回はLlama-3-ELYZA-JP-8Bをダウンロードしています。
Llama-3-ELYZA-JP-8Bは、ELYZA社が開発した日本語に特化した大規模言語モデルです。Meta社の「Llama 3」シリーズをベースに、日本語での追加学習を行っています。
!nohup ollama serve &
!ollama pull hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF
ではLiteLLMで呼び出して実際に動かしてみます。
!pip install litellm
ライブラリをインストールし、
from litellm import completion
response = completion(
model="ollama/hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF",
messages=[{ "content": "transformerについて解説して","role": "user"}],
api_base="http://localhost:11434"
)
print(response)
上のコードを実行するだけで簡単に動かすことができました。
次にFirecrawlを試します。
!pip install firecrawl-py
ライブラリをインストールし、
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="API-KEY")
content = app.scrape_url("https://openai.com/ja-JP/about/")
このコードを実行するだけで、指定したURLをスクレイピングできます。サイト全体のクローリングも可能です。
contentの中身を確認してみると、以下のようになっていました。
雑にそのままLlama-3-ELYZA-JP-8Bに要約させてみます。
response = completion(
model="ollama/hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF",
messages=[{ "content": f'''以下はある企業のHPの内容です。ここから企業情報を要約して\n{ content['markdown'] }''',"role": "user"}],
api_base="http://localhost:11434"
)
print(response['choices'][0]['message'].content)
[OpenAIについて学ぶ](/ja-JP/index/openai-lp/) [当社の体制について読む](/ja-JP/our-structure/)
#### 私たちの取り組み
私たちは、AI技術を社会に還元し、人類全体の利益を追求するために日々努力しています。AIが世界中の人々の生活を向上させるために、私たちは以下のような取り組みを行っています。
## 1. AI for Social Impact
私たちは、AIを活用して社会的課題を解決することを目指しています。例えば、AIを使用した医療診断や、AIが自動車の安全運転をサポートするなどです。
## 2. AI Research
私たちは、人工知能の限界を超えるために、継続的に研究を行っています。これには、強いAIの開発や、AIと人間の協調的な相互作用の実現などが含まれます。
## 3. Education and Community Building
私たちは、AI技術の普及と教育に力を入れています。私たちの目標は、世界中でAIを理解し、活用することができる人材を育成することです。私たちは、学生や研究者向けのリソースや、コミュニティーを提供しています。
## 4. Corporate Partnerships
私たちは、企業と協力して、AI技術を社会に還元する取り組みを行っています。これには、AIを活用した新しい製品やサービスの開発、AIを使用したプロセス改善、などが含まれます。
## 5. Transparency and Accountability
私たちは、透明性と説明責任を重視し、AI技術の社会的影響を常に検証しています。私たちの目標は、AI技術が公正かつ安全に使用され、人類全体の利益になることです。
[OpenAIについて学ぶ](/ja-JP/index/openai-lp/) [当社の体制について読む](/ja-JP/our-structure/)
### OpenAIの採用情報
私たちは、人工知能の未来を切り拓くために、多才な人材を求めています。以下は、私たちの採用機会です。
## 1. Software Engineer
私たちは、ソフトウェアエンジニアを募集しています。私たちのAI技術の開発や改良に参加し、革新的な製品やサービスを創造することができます。
## 2. Research Scientist
私たちは、研究科学者を募集しています。私たちのAI技術の限界を超えるために、新しいアイデアや手法を探求し、人工知能の進歩に貢献することができます。
## 3. Data Analyst
私たちは、データ分析家を募集しています。私たちのAIモデルが最適化されるように、大規模なデータセットを解析し、有益な情報を抽出することができます。
## 4. Content Reviewer
私たちは、コンテンツレビューアーを募集しています。私たちのAI技術が、公正かつ安全に使用されるように、高品質のコンテンツを監視し、不適切なコンテンツを特定することができます。
[求人情報を見る](/careers/) [OpenAIについて学ぶ](/ja-JP/index/openai-lp/) [当社の体制について読む](/ja-JP/our-structure/)
こんな感じになりました。
終わりに
この記事ではOllamaとFirecrawlをColabで軽く動かしてみました。
Firecrawlは試しにスクレイピングをしてみただけですが、マークダウン形式で情報を取得することができ、そのままLLMに投げて要約とか、クローリングして色々な情報を抽出した後にLLMに欲しい情報だけ取ってきてもらうとか、Ollamaと組み合わせて色々試せそうです。
このあたり引き続き調べていこうと思います。