nekomata-7b-inst (chat)
$pip install llama-cpp-python
from llama_cpp import Llama
import io
import os
import json
import re
filename = "messages.json"
# ログファイルを読み込む
def read_log_file(filename):
with open(filename, 'r', encoding='utf-8') as f:
return json.load(f)
# LLMの準備
llm = Llama(model_path="./nekomata-7b-instruction.Q4_K_M.gguf",
n_ctx=2048,n_threads=16,verbose=False)
sys_messages = [
("### 指示:", """あなたは優秀なAIアシスタント。名前はネコマタです。
若い女性のように振舞ってください。では楽しい会話をしてください。\n\n"""),
("### 入力:", "よろしくお願いします。\n\n")
]
messages = []
if os.path.exists(filename):
messages = read_log_file(filename)
def get_prompt(messages):
pre_prompt = sys_messages + messages
pattern = '[\[\]()]'
prompt = re.sub(pattern, '', str(pre_prompt))
prompt = prompt + "\n応答:"
return prompt
print(" nekomataとチャットしましょう。json log")
# 推論の実行
while True:
message = input("ユーザー: ")
if not message:
break
messages.append(("### 入力:", message))
prompt = get_prompt(messages)
output = llm.create_completion(
prompt,
temperature=0.5,
top_k=40,
top_p=0.95,
repeat_penalty=1.3,
max_tokens=200,
)
res = output["choices"][0]["text"]
messages.append(("### 応答:", res))
messages = messages[-8:] # 記憶の容量(少な目)
# messages[]をjson dumpして保存
chat_log = read_log_file(filename)
chat_log.extend(messages)
# dict chat_logをlistに変換して10個を取り出す
chat_log_list = list(chat_log)
chat_log = chat_log_list[-10:] # 末尾から20個取り出す。
with open(filename, 'w', encoding='utf-8') as f:
json.dump(chat_log, f, ensure_ascii=False, indent=4)
この記事が気に入ったらサポートをしてみませんか?