1
/
5

AIとchatできるLineBotを作った話5

Toolの作成

LangChainの事もなんとなく分かってきた所で、早速AIが利用するためのToolを作っていきます!

前回の繰り返しになりますが、今回必要なToolは4つです。

1.Web検索tool
2.スクレイピングtool
3.画像生成tool
4.画像編集tool

この中で、Web検索toolを例にtoolを作った話をご紹介します!
今回は、AIに触れることは意外と簡単なんだと感じられるように実際に書いたコードもご紹介します😃


Web検索Toolに必要なもの

Web検索ツールを作成するために、serpというものを利用します。
serpというのはSearch Engine Results Pageの略で、検索ワードから検索結果を返してくれるものです。
プログラムから使える検索エンジンのイメージです😃

このserpにも種類があり、有名どころではserpAPIなどがあります。

ただ、大体のserpは無料で利用できる回数に制限があったりします。

そこで今回はDuckDuckGoというものを使っていきます😃

DuckDuckGoとは
DuckDuckGoは、ユーザーのプライバシーを重視する検索エンジンです。検索履歴を追跡せず、広告も少ないため、個人情報が保護されます。DuckDuckGo APIは無料で利用でき、検索結果をJSON形式で取得可能です。

DuckDuckGoを利用するためのライブラリが提供されていて、非常に簡単に使うことができます!

DuckDuckGoを使用してインターネットから情報を取得するツールは標準で提供されていましたが、今回は勉強も兼ねて自作していきます😃

まずはライブラリをインストールします。

pip install duckduckgo-search

これだけでDuckDuckGoの検索が使えるようになります。お手軽ですね!

次に、この検索エンジンを組み込んだツールを作ります。

以下がサンプルコードになります😃

class DDGSSearchTool(BaseTool):
name = "search"
description = "引数からwebを検索し、タイトルとURLと内容の辞書型のリストを返す。引数はできる限り具体的に、複数のキーワードがある場合はスペースで区切る。取得できなければ空のリストを返す。例:[{'title':'タイトル', 'URL': 'https://yahoo.co.jp/','content': '内容'}]"

def get_urls(self, query: str):
from duckduckgo_search import DDGS

result = []
with DDGS() as ddgs:
for r in ddgs.text(query, region='jp-jp', safesearch='off', timelimit='y', max_results=10):
result.append(
{'title': r['title'], 'URL': r['href'], 'content': r['body']})

return result

def _run(
self, query: str, run_manager: Optional[CallbackManagerForToolRun] = None
) -> list:
""" Use the tool. :param query: 検索する文字列を入力。例: chatGPTの使い方 """
result = self.get_urls(query)

return result

LangChainがBaseToolというツールを作るためのクラスを提供してくれているので、こんなに簡単なコードでツールを作成することができます😄
夢が広がりますね!

簡単にコードの説明をすると、

description = "引数からwebを検索し、タイトルとURLと内容の辞書型のリストを返す。引数はできる限り具体的に、複数のキーワードがある場合はスペースで区切る。取得できなければ空のリストを返す。例:[{'title':'タイトル', 'URL': 'https://yahoo.co.jp/','content': '内容'}]"

この部分でこのツールはどんなものかを書いておきます。この部分はプログラムではなく、人間の言葉で書けるのが凄いところです😳

この部分を見てAIはこのツールがどんなものであるかを判断します。

今回のように、『引数からwebを検索し、タイトルとURLと内容の辞書型のリストを返す。』と書いておくことでAIは『分からない事があってインターネットで調べたい事があるときはこれを使えばいいんだ!』という気持ちになります!


def get_urls(self, query: str):
from duckduckgo_search import DDGS

result = []
with DDGS() as ddgs:
for r in ddgs.text(query, region='jp-jp', safesearch='off', timelimit='y', max_results=10):
result.append(
{'title': r['title'], 'URL': r['href'], 'content': r['body']})

return result

この部分は実際にduckduckgoを使ってインターネットから検索結果を取得している部分になります。

このようにライブラリを使用することでたった数行の簡単なコードでこの様なことが可能になります😃

現在は本当に多種多様なライブラリが提供されているので、アイデア次第でお手軽に色々な事ができますね😄

さあ、これだけでWeb検索toolが完成しました!

同じ要領で他の必要なtoolも作っていきます!

必要なtoolが揃った所で次回はこれらのtoolを使う本体、AIの部分を書いていきます😃


AIとchatできるLineBotを作った話6 に続く





Invitation from スリーケシステム株式会社
If this story triggered your interest, have a chat with the team?
スリーケシステム株式会社's job postings

Weekly ranking

Show other rankings
Like 岸井 厚郎's Story
Let 岸井 厚郎's company know you're interested in their content