mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 23:23:55 +08:00
* 增加本地记忆功能,使用llm总结记忆 * update:增加统一非流式输出输出 * 增加意图识别内容,使用llm进行识别 * 初始化记忆模块 * 完善意图识别处理后的流程 * 通过使用function call实现意图识别 * update:优化意图识别的配置 * update:function call最优设置成doubao-pro-32k-functioncall-241028 --------- Co-authored-by: 玄凤科技 <eric230308@gmail.com> Co-authored-by: hrz <1710360675@qq.com>
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from abc import ABC, abstractmethod
|
|
from config.logger import setup_logging
|
|
|
|
TAG = __name__
|
|
logger = setup_logging()
|
|
|
|
class LLMProviderBase(ABC):
|
|
@abstractmethod
|
|
def response(self, session_id, dialogue):
|
|
"""LLM response generator"""
|
|
pass
|
|
|
|
def response_no_stream(self, system_prompt, user_prompt):
|
|
try:
|
|
# 构造对话格式
|
|
dialogue = [
|
|
{"role": "system", "content": system_prompt},
|
|
{"role": "user", "content": user_prompt}
|
|
]
|
|
result = ""
|
|
for part in self.response("", dialogue):
|
|
result += part
|
|
return result
|
|
|
|
except Exception as e:
|
|
logger.bind(tag=TAG).error(f"Error in Ollama response generation: {e}")
|
|
return "【LLM服务响应异常】"
|
|
|
|
def response_with_functions(self, session_id, dialogue, functions=None):
|
|
"""
|
|
Default implementation for function calling (streaming)
|
|
This should be overridden by providers that support function calls
|
|
|
|
Returns: generator that yields either text tokens or a special function call token
|
|
"""
|
|
# For providers that don't support functions, just return regular response
|
|
for token in self.response(session_id, dialogue):
|
|
yield {"type": "content", "content": token} |