From 8c7d1290892c51d5afe91e11eb999d2439a80a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=84=E5=87=A4=E7=A7=91=E6=8A=80?= Date: Wed, 16 Apr 2025 08:58:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5coze=20llm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/providers/llm/coze/coze.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/main/xiaozhi-server/core/providers/llm/coze/coze.py b/main/xiaozhi-server/core/providers/llm/coze/coze.py index b1b14d91..f4139cb6 100644 --- a/main/xiaozhi-server/core/providers/llm/coze/coze.py +++ b/main/xiaozhi-server/core/providers/llm/coze/coze.py @@ -7,6 +7,7 @@ import os # official coze sdk for Python [cozepy](https://github.com/coze-dev/coze-py) from cozepy import COZE_CN_BASE_URL from cozepy import Coze, TokenAuth, Message, ChatStatus, MessageContentType, ChatEventType # noqa +from core.providers.llm.system_prompt import get_system_prompt_for_function TAG = __name__ logger = setup_logging() @@ -47,4 +48,24 @@ class LLMProvider(LLMProviderBase): ): if event.event == ChatEventType.CONVERSATION_MESSAGE_DELTA: print(event.message.content, end="", flush=True) - yield event.message.content \ No newline at end of file + yield event.message.content + + def response_with_functions(self, session_id, dialogue, functions=None): + if len(dialogue) == 2 and functions is not None and len(functions) > 0: + # 第一次调用llm, 取最后一条用户消息,附加tool提示词 + last_msg = dialogue[-1]["content"] + function_str = json.dumps(functions, ensure_ascii=False) + modify_msg = get_system_prompt_for_function(function_str) + last_msg + dialogue[-1]["content"] = modify_msg + + # 如果最后一个是 role="tool",附加到user上 + if len(dialogue) > 1 and dialogue[-1]["role"] == "tool": + assistant_msg = "tool call result: " + dialogue[-1]["content"] + while len(dialogue) > 1 : + if dialogue[-1]["role"] == "user": + dialogue[-1]["content"] += assistant_msg + break + dialogue.pop() + + for token in self.response(session_id, dialogue): + yield token, None \ No newline at end of file