From a9611feafb57db32d97e4b32e502604af7ed331f Mon Sep 17 00:00:00 2001 From: sudoskys Date: Fri, 27 Jan 2023 16:13:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?0.2.0=20=E4=BF=AE=E5=A4=8D=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=BA=93=EF=BC=8C=E4=BF=AE=E5=A4=8D=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 3 +-- src/llm_kira/client/Optimizer.py | 11 +++++++++++ src/llm_kira/client/anchor.py | 1 + src/llm_kira/utils/data.py | 9 +++++---- test/test.py | 30 +++++++++++++++++------------- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a09c6b4..a446e95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,9 +23,8 @@ pydantic = "^1.10.4" loguru = "^0.6.0" elara = "^0.5.4" openai-async = "^0.0.2" -numpy = "^1.24.1" +numpy = "^1.22.1" tiktoken = "^0.1.2" -scikit-learn = "^1.2.0" # pycurl = "^7.43.0.6" diff --git a/src/llm_kira/client/Optimizer.py b/src/llm_kira/client/Optimizer.py index 72dc10f..e665869 100644 --- a/src/llm_kira/client/Optimizer.py +++ b/src/llm_kira/client/Optimizer.py @@ -253,6 +253,17 @@ def forgetting_curve(x): if len(ask) < 1 or len(reply) < 1: memory[i]["content"]["weight"].append(-1000) + _sentiment_ = prompt.split(":", 1) + _sentiment_ = _sentiment_[0] if len(_sentiment_) == 1 else _sentiment_[1] + _prompt_sentiment = Utils.sentiment(sentence=_sentiment_).get("score") + # 情绪识别 + for i in range(len(memory) - attention, len(memory)): + ask, reply = MsgFlow.get_content(memory[i], sign=True) + if _prompt_sentiment < -0.3: + memory[i]["content"]["ask"] = ask + "" + if _prompt_sentiment > 0.3: + memory[i]["content"]["ask"] = ask + "" + # 相似度检索 for i in range(0, len(memory)): ask, reply = MsgFlow.get_content(memory[i], sign=False) diff --git a/src/llm_kira/client/anchor.py b/src/llm_kira/client/anchor.py index 598a574..a0719cb 100644 --- a/src/llm_kira/client/anchor.py +++ b/src/llm_kira/client/anchor.py @@ -250,6 +250,7 @@ async def predict(self, prompt_text: str = self.prompt.run(raw_list=False) # prompt 前向注入 prompt_raw: list = self.prompt.run(raw_list=True) + prompt_raw.pop(-1) __extra_memory = [] for item in prompt_raw: index = round(len(item) / 3) if round(len(item) / 3) > 3 else 10 diff --git a/src/llm_kira/utils/data.py b/src/llm_kira/utils/data.py index 8337a00..9975126 100644 --- a/src/llm_kira/utils/data.py +++ b/src/llm_kira/utils/data.py @@ -6,7 +6,7 @@ import ast import time import json -from typing import Union, Optional, List +from typing import Union, Optional, List, Tuple from ..client.types import Memory_Flow, MemoryItem from ..utils import setting from pydantic import BaseModel @@ -199,7 +199,7 @@ def _set_uid(self, uid, message_streams): return self.MsgFlowData.setKey(uid, message_streams) @staticmethod - def get_content(memory_flow: Memory_Flow, sign: bool = False) -> tuple: + def get_content(memory_flow: Memory_Flow, sign: bool = False) -> Tuple[str, str]: """ 得到单条消息的内容 :param sign: 是否署名 @@ -214,7 +214,7 @@ def get_content(memory_flow: Memory_Flow, sign: bool = False) -> tuple: if isinstance(memory_flow, dict): _ask_ = memory_flow["content"]["ask"] _reply_ = memory_flow["content"]["reply"] - if not sign and ":" in _ask_ and ':' in _reply_: + if not sign and ":" in _ask_ and ':' in _reply_: _ask_ = _ask_.split(":", 1)[1] _reply_ = _reply_.split(":", 1)[1] if _ask_ == _reply_: @@ -227,7 +227,8 @@ def saveMsg(self, msg: MemoryItem) -> None: content = Memory_Flow(content=msg, time=time_s).dict() _message_streams = self._get_uid(self.uid) if "msg" in _message_streams: - _message_streams["msg"] = sorted(_message_streams["msg"], key=lambda x: x['time'], reverse=False) + # 倒序 + _message_streams["msg"] = sorted(_message_streams["msg"], key=lambda x: x['time'], reverse=True) # 记忆容量重整 if len(_message_streams["msg"]) > self.memory: for i in range(len(_message_streams["msg"]) - self.memory + 1): diff --git a/test/test.py b/test/test.py index 24a2876..9aa1da4 100644 --- a/test/test.py +++ b/test/test.py @@ -50,7 +50,7 @@ async def completion(): conversation = receiver.Conversation( start_name="Human:", restart_name="AI:", - conversation_id=10093, # random.randint(1, 10000000), + conversation_id=10096, # random.randint(1, 10000000), ) llm = llm_kira.client.llms.OpenAi( @@ -70,8 +70,8 @@ async def completion(): async def chat(): promptManager = receiver.PromptManager(profile=conversation, - connect_words="\n", - ) + connect_words="\n", + ) # 大型数据对抗测试 # promptManager.insert(item=PromptItem(start="Neko", text=random_string(4000))) # promptManager.insert(item=PromptItem(start="Neko", text=random_string(500))) @@ -79,13 +79,14 @@ async def chat(): # 多 prompt 对抗测试 # promptManager.insert(item=PromptItem(start="Neko", text="喵喵喵")) - promptManager.insert(item=PromptItem(start=conversation.start_name, text="我的账号是 2216444")) + promptManager.insert(item=PromptItem(start=conversation.start_name, text="换谁都被吓走吧")) response = await chat_client.predict( - llm_param=OpenAiParam(model_name="text-davinci-003", temperature=0.8, presence_penalty=0.1, n=2, best_of=2), + llm_param=OpenAiParam(model_name="text-davinci-003", temperature=0.8, presence_penalty=0.1, n=1, best_of=1), prompt=promptManager, predict_tokens=500, increase="外部增强:每句话后面都要带 “喵”", ) + print(f"id {response.conversation_id}") print(f"ask {response.ask}") print(f"reply {response.reply}") @@ -93,13 +94,15 @@ async def chat(): print(f"usage:{response.llm.raw}") print(f"---{response.llm.time}---") promptManager.clean() + return "END" promptManager.insert(item=PromptItem(start=conversation.start_name, text="说出我的账号?")) - response = await chat_client.predict(llm_param=OpenAiParam(model_name="text-davinci-003", logit_bias=None), - prompt=promptManager, - predict_tokens=500, - increase="外部增强:每句话后面都要带 “喵”", - # parse_reply=None - ) + response = await chat_client.predict( + llm_param=OpenAiParam(model_name="text-davinci-003", temperature=0.8, presence_penalty=0.1, n=2, best_of=2), + prompt=promptManager, + predict_tokens=500, + increase="外部增强:每句话后面都要带 “喵”", + # parse_reply=None + ) _info = "parse_reply 回调会处理 llm 的回复字段,比如 list 等,传入list,传出 str 的回复。必须是 str。", print(f"id {response.conversation_id}") print(f"ask {response.ask}") @@ -121,9 +124,10 @@ async def Sentiment(): "什么是?", "玉玉了,紫砂了", "我知道了", - "主播抑郁了,自杀了", + "抑郁了,自杀了", "公主也能看啊", - "换谁都被吓走吧" + "换谁都被吓走吧", + "错了" ] for item in _sentence_list: print(item) From 602211179aae25fac767db848ce0df27745a0d51 Mon Sep 17 00:00:00 2001 From: sudoskys Date: Fri, 27 Jan 2023 16:14:06 +0800 Subject: [PATCH 2/3] =?UTF-8?q?0.2.0=20=E4=BF=AE=E5=A4=8D=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=BA=93=EF=BC=8C=E4=BF=AE=E5=A4=8D=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a446e95..75dca9a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "llm_kira" -version = "0.2.0" +version = "0.2.1" description = "chatbot client for llm" authors = ["sudoskys "] maintainers = [ From 0732d54889442edd1ba165ce99d0c5bb20adcfee Mon Sep 17 00:00:00 2001 From: sudoskys Date: Fri, 27 Jan 2023 16:14:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?0.2.0=20=E4=BF=AE=E5=A4=8D=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=BA=93=EF=BC=8C=E4=BF=AE=E5=A4=8D=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/llm_kira/client/Optimizer.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/llm_kira/client/Optimizer.py b/src/llm_kira/client/Optimizer.py index e665869..72dc10f 100644 --- a/src/llm_kira/client/Optimizer.py +++ b/src/llm_kira/client/Optimizer.py @@ -253,17 +253,6 @@ def forgetting_curve(x): if len(ask) < 1 or len(reply) < 1: memory[i]["content"]["weight"].append(-1000) - _sentiment_ = prompt.split(":", 1) - _sentiment_ = _sentiment_[0] if len(_sentiment_) == 1 else _sentiment_[1] - _prompt_sentiment = Utils.sentiment(sentence=_sentiment_).get("score") - # 情绪识别 - for i in range(len(memory) - attention, len(memory)): - ask, reply = MsgFlow.get_content(memory[i], sign=True) - if _prompt_sentiment < -0.3: - memory[i]["content"]["ask"] = ask + "" - if _prompt_sentiment > 0.3: - memory[i]["content"]["ask"] = ask + "" - # 相似度检索 for i in range(0, len(memory)): ask, reply = MsgFlow.get_content(memory[i], sign=False)