diff --git a/pkg/pipeline/resprule/resprule.py b/pkg/pipeline/resprule/resprule.py index fce0c4ec..b7fdb372 100644 --- a/pkg/pipeline/resprule/resprule.py +++ b/pkg/pipeline/resprule/resprule.py @@ -44,8 +44,8 @@ async def process(self, query: core_entities.Query, stage_inst_name: str) -> ent use_rule = rules['default'] - if str(query.launcher_id) in use_rule: - use_rule = use_rule[str(query.launcher_id)] + if str(query.launcher_id) in rules: + use_rule = rules[str(query.launcher_id)] for rule_matcher in self.rule_matchers: # 任意一个匹配就放行 res = await rule_matcher.match(str(query.message_chain), query.message_chain, use_rule, query) diff --git a/pkg/pipeline/resprule/rules/prefix.py b/pkg/pipeline/resprule/rules/prefix.py index 99dcd4f9..98b50321 100644 --- a/pkg/pipeline/resprule/rules/prefix.py +++ b/pkg/pipeline/resprule/rules/prefix.py @@ -20,11 +20,14 @@ async def match( for prefix in prefixes: if message_text.startswith(prefix): + # 查找第一个plain元素 + for me in message_chain: + if isinstance(me, mirai.Plain): + me.text = me.text[len(prefix):] + return entities.RuleJudgeResult( matching=True, - replacement=mirai.MessageChain([ - mirai.Plain(message_text[len(prefix):]) - ]), + replacement=message_chain, ) return entities.RuleJudgeResult( diff --git a/pkg/provider/modelmgr/apis/chatcmpl.py b/pkg/provider/modelmgr/apis/chatcmpl.py index 028b208e..3f1cfb32 100644 --- a/pkg/provider/modelmgr/apis/chatcmpl.py +++ b/pkg/provider/modelmgr/apis/chatcmpl.py @@ -102,9 +102,16 @@ async def call( messages: typing.List[llm_entities.Message], funcs: typing.List[tools_entities.LLMFunction] = None, ) -> llm_entities.Message: - req_messages = [ # req_messages 仅用于类内,外部同步由 query.messages 进行 - m.dict(exclude_none=True) for m in messages - ] + req_messages = [] # req_messages 仅用于类内,外部同步由 query.messages 进行 + for m in messages: + msg_dict = m.dict(exclude_none=True) + content = msg_dict.get("content") + if isinstance(content, list): + # 检查 content 列表中是否每个部分都是文本 + if all(isinstance(part, dict) and part.get("type") == "text" for part in content): + # 将所有文本部分合并为一个字符串 + msg_dict["content"] = "\n".join(part["text"] for part in content) + req_messages.append(msg_dict) try: return await self._closure(req_messages, model, funcs)