1
/
5

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

Toolを使うAIの作成

前回まででAIが使うためのツールを作成する事ができました。

今度は、肝心のAI部分の実装をしていきます!

今回は、普通のラインのメッセージ(テキスト)が来た場合にどのような流れになるかを書いていきます!


AI部分

まずはAIの初期設定を読み込んでいきます。

ここには、AIの記憶は過去何文文字までに制限するか、どんなツールを持たせるか、このチャットbotの基本的な性格はどんな感じかなどを書いていきます。

あと大事なのはどのAIを使うかです。最新であるほど頭が良いのですがコストがかかります。

今回は、通常の会話はgpt3.5を使用し、画像生成の為のプロンプト作成部分などはgpt4を使用するというように使い分けていきます。下記がサンプルコードです!

class Chat_bot:
def __init__(self, *args, **kwargs):
self.history_max_len = 3000

lc_tools = [SpaceSearchTool(), GetWebContentsTool(),
CreateImageStableTool(return_direct=True)]
self.oai_tools = [format_tool_to_openai_function(
tool) for tool in lc_tools]
self.llm = ChatOpenAI(temperature=0.5, model="gpt-3.5-turbo-1106")
self.memory = ChatMessageHistory()
self.system_message = DEFAULT_SYSTEM_MASSAGE
self.user_message = DEFAULT_USER_MASSAGE
self.prompt = ChatPromptTemplate.from_messages(
[
("system", self.system_message),
("user", self.user_message),
MessagesPlaceholder(variable_name="history"),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
]
)
self.agent = (
{
"input": lambda x: x["input"],
"agent_scratchpad": lambda x: format_to_openai_function_messages(
x["intermediate_steps"]
),
"history": lambda x: self.memory.messages,
}
| self.prompt
| self.llm.bind(functions=self.oai_tools)
| OpenAIFunctionsAgentOutputParser()
)
self.agent_executor = AgentExecutor(
agent=self.agent, tools=lc_tools, verbose=True, max_iterations=10)
self.simple_memory = SimpleMemory()

これだけでチャットbotが完成したようなものです😃

様々なステータスがあり用途によって多様なチューニングができる事が分かったのですが、今回はシンプルな設定にしました。

後は下記のようにこちらのメッセージをこのチャットbotに渡します。

result = self.agent_executor.invoke({"input": text})

これだけでresultにはAIからの返信メッセージが入ってきます😳

この中で起きている処理は以下のようになります。

このように、ユーザーから見るとメッセージに対して返信が返ってきているだけに感じますが、実際は内部ではツールを使用してAIが納得いくまでこれを繰り返していきます。

凄いのはこの部分です🧐

この部分の場合分けをAIがやっています!

自分で自由にツールを作れることと併せて考えると、アイデア次第で本当にいろいろな事が可能になってきますよね!

こんな感じで実際に作ったLinebotにメッセージを送ってみます😃

この様に、web検索した内容を元に返信をしている事や、URLを元にスクレイピングして得た内容を元に返信している事がわかると思います😃

また、画像もいい感じに生成できています!

ここまでで書いたように、今は思った以上にAIは身近に、簡単に扱えるような時代になってきていることを実感しています。

これからもAIを開発に活かしたり、AIの力をプロダクトに盛り込むなど、色々なことに活用していきたいと思っています!







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