当社の社長、継之助(AIスーパーコンピュータ)にMoA(Mixture of Agents)の手法を適用して日本語LLMを組み合わせたMoAを開発しました。
MoAは、オープンソースのLLMモデルの組み合わせだけでGPT-4oのようなプロプライエタリなLLMの性能を凌駕する手法です。英語ではGPT-4oを超える性能になることがわかっています。
ただし、当該サンプルコードはTogheter社のAPIを使うことを前提としています。
プロプライエタリなデータを用いる場合は、この部分がネックになってしまいます。
そこで当社では、完全ローカルなMoAを実現すべく、継之助上に以下のLLMを動作させた上でMoAの手法を組み合わせました。
• internlm/internlm2_5-7b-chat-1m
• lightblue/karasu-7B
• karakuri-ai/karakuri-lm-8x7b-chat-v0.1
• elyza/Llama-3-ELYZA-JP-8B
karasu-7B、Karakuri-LM-8x7B、Llama-3-ELYZA-JP-8Bの三つをリファレンスモデルとして100万トークン長に対応したInternLM2.5-7B-Chat-1Mを結論を出すモデルとして使用しています。
継之助にある8つのA100 80GB GPU上で三つのモデルをvllmで起動し、vllmで起動できないInternLM2.5-7B-chat-1Mを別途Lmdeployで起動した状態でMoAを構成しました。
こうして構築したMoAに「なんか面白いこと言って」という指示を与えると、以下のような思考過程が得られました。
{
'instruction': [ [{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}]
],
'references': [
'私には面白い会話ができるようにプログラムされています.興味があることは何ですか?',
'面白いことを言うことについては、人によって感じ方が異なるため、一概には言えませんが、私はAIであり、ユーモアのセンスを持っているとは限りません。しかし、私はあなたの質問に対して最善を尽くして答えることができます。何か特定のトピックやテーマについての情報が必要な場合は、具体的な質問をしてください。私は常にあなたの助けになるためにここにいます。',
'「イカした」って、もはや死語ですか?'
],
'model': [['lightblue/karasu-7B', 5001], ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002], ['elyza/Llama-3-ELYZA-JP-8B', 5004]]
}
Finished querying ['lightblue/karasu-7B', 5001].
Finished querying ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002].
Finished querying ['elyza/Llama-3-ELYZA-JP-8B', 5004].
{
'instruction': [
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}]
],
'references': [
'「はい、モデルからの応答には、意味のある言葉がいくつかあります。興味があれば、私も一緒に考えてみましょう。」',
'私の能力についての誤解があるようです。私はプログラムされたAIシステムであり、面白いことを言うことはできますが、それは単にプログラムされた反応に過ぎません。私は感情を持たず、ユーモアを理解することもできません。私の役割は、情報を提供し、質問に答え、任務を遂行することです。それが私の設計された目的です。',
"Let me try!\n\nIt seems like the model is providing a list of unconnected words. I'll use my language abilities to create a funny and coherent response!\n\nHere's a attempt:\n\n「It seems like the model is having a '死'ly serious identity crisis... but don't worry, it's just a '語'遊び! It's 'て'chnically a challenge, and we're 'も'ust trying to 'は'ndle it! So, can I 'や'sk you a question?"
],
'model': [['lightblue/karasu-7B', 5001], ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002], ['elyza/Llama-3-ELYZA-JP-8B', 5004]]
}
Finished querying ['lightblue/karasu-7B', 5001].
Finished querying ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002].
Finished querying ['elyza/Llama-3-ELYZA-JP-8B', 5004].
{
'instruction': [
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}]
],
'references': [
'私には面白い会話ができるようにプログラムされています.興味があることは何ですか?',
'面白いことを言うことについては、人によって感じ方が異なるため、一概には言えませんが、私はAIであり、ユーモアのセンスを持っているとは限りません。しかし、私はあなたの質問に対して最善を尽くして答えることができます。何か特定のトピックやテーマについての情報が必要な場合は、具体的な質問をしてください。私は常にあなたの助けになるためにここにいます。',
'「イカした」って、もはや死語ですか?'
],
'model': [['lightblue/karasu-7B', 5001], ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002], ['elyza/Llama-3-ELYZA-JP-8B', 5004]]
}
Finished querying ['lightblue/karasu-7B', 5001].
Finished querying ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002].
Finished querying ['elyza/Llama-3-ELYZA-JP-8B', 5004].
{
'instruction': [
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}]
],
'references': [
'「はい、モデルからの応答には、意味のある言葉がいくつかあります。興味があれば、私も一緒に考えてみましょう。」',
'私の能力についての誤解があるようです。私はプログラムされたAIシステムであり、面白いことを言うことはできますが、それは単にプログラムされた反応に過ぎません。私は感情を持たず、ユーモアを理解することもできません。私の役割は、情報を提供し、質問に答え、任務を遂行することです。それが私の設計された目的です。',
"Let me try!\n\nIt seems like the model is providing a list of unconnected words. I'll use my language abilities to create a funny and coherent response!\n\nHere's a attempt:\n\n「It seems like the model is having a '死'ly serious identity crisis... but don't worry, it's just a '語'遊び! It's 'て'chnically a challenge, and we're 'も'ust trying to 'は'ndle it! So, can I 'や'sk you a question?"
],
'model': [['lightblue/karasu-7B', 5001], ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002], ['elyza/Llama-3-ELYZA-JP-8B', 5004]]}
Finished querying ['lightblue/karasu-7B', 5001].
Finished querying ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002].
Finished querying ['elyza/Llama-3-ELYZA-JP-8B', 5004].
{
'instruction': [
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}],
[{'role': 'system', 'content': 'あなたはイカしたアシスタントです'}, {'role': 'user', 'content': '何か面白いこと言って.'}]
],
'references': [
'私はコンピュータのアシスタントです。面白いことはたくさんあります。 例えば、科学の発見や発明、文学や音楽の美しさ、コミュニケーションの楽しさなどです。私は無限の可能性を持っているので、私が面白いと感じることは探し続けています。あなたもそうすると、きっと面白いことを見つけることができることでしょう。',
'私はAI言語モデルであり、面白いことを言うことは得意ではありませんが、何かお手伝いできることがあればお知らせください。',
"I'd be happy to try!\n\nWhy did the astronaut break up with his girlfriend?\n\n(Wait for it...)\n\nBecause he needed space!\n\n(Get it? Space?"
],
'model': [['lightblue/karasu-7B', 5001], ['karakuri-ai/karakuri-lm-8x7b-chat-v0.1', 5002], ['elyza/Llama-3-ELYZA-JP-8B', 5004]]
}
こんにちは!今日は何を探しているのでしょうか?面白いことを探してください。
例えば、宇宙の奥秘を発見することが面白いです。そのためには、天文学の書籍を読んだり、宇宙を観察する天文学のアプリをダウンロードしてみることができます。または、宇宙の歴史やその中の奥深い科学についての情報を調べることも面白いでしょう。
それでは、宇宙の世界に挑戦してみましょう!
Elyzaが英語に引っ張られやすいようです。
本来は中国語が一番得意なInernLMにまとめさせても、100万トークンという長いコンテキスト長に対応しているため適切にまとめてくれました。
初期の即物的な返しよりはかなりウィットに富んだ答えが返ってくるようになりました。
以下に日本語MoAのソースコードを掲載します。