[ChatStream] rinna/nekomata-14b-instruction 用の ChatPromptクラス
2023/12/21 に発表された rinna/nekomata-14b-instruction 用の ChatPrompt をご紹介します
nekomataシリーズは Qwen をベースモデルしているおり、語彙サイズが 15.2万とこれまでより大幅に大きいため、日本語対応にもおおいに期待できそうですね
今回はInstructionチューニングされたモデルをChatStreamのチャットモードで利用するためのChatPromptを作りました。
設計思想としましては、あるタスクとChatPrompt を対応させる、という考え方です。簡単にいうと、1つのChatPromptは1つの仕事に特化させる、というところでしょうか。
たとえば、今回は、「翻訳」というタスクに特化した ChatPrompt の例です。
これにより 翻訳 というタスクに対して、 「入力」と「出力」というをチャットインタフェースを通して行います。
from chatstream import AbstractChatPrompt
from chatstream.chat_prompt.prompt_ttl import PromptTTL
class ChatPromptRinnaNekomata(AbstractChatPrompt):
def __init__(self):
super().__init__()
system_message = "以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。"
instruction_message = "次の日本語を英語に翻訳してください。"
self.set_system(f"{system_message}\n\n### 指示:\n{instruction_message}")
self.set_requester("入力")
self.set_responder("応答")
self.set_prompt_ttl(PromptTTL.SINGLE_TURN)
def get_stop_strs(self):
if not self.chat_mode:
return None
return ["<|endoftext|>"]
def get_replacement_when_input(self):
return None
def get_replacement_when_output(self):
return None
def create_prompt(self, opts={}):
if not self.chat_mode:
return self.get_requester_last_msg()
ret = self.system + "\n\n"
for chat_content in self.get_contents(opts):
chat_content_role = chat_content.get_role()
chat_content_message = chat_content.get_message()
if chat_content_role:
if chat_content_message:
merged_message = f"### {chat_content_role}:\n" + chat_content_message + "\n\n"
else:
merged_message = f"### {chat_content_role}:\n"
ret += merged_message
return ret