diff --git a/config.yaml b/config.yaml index be05f592..184182a8 100644 --- a/config.yaml +++ b/config.yaml @@ -44,7 +44,7 @@ VAD: min_silence_duration_ms: 700 # 如果说话停顿比较长,可以把这个值设置大一些 LLM: - # 当前支持的type为openai、dify,可自行适配 + # 当前支持的type为openai、dify、ollama,可自行适配 AliLLM: # 定义LLM API类型 type: openai @@ -67,6 +67,11 @@ LLM: model_name: glm-4-flash url: https://open.bigmodel.cn/api/paas/v4/ api_key: 你的bigmodel api key + OllamaLLM: + # 定义LLM API类型 + type: ollama + model_name: qwen2.5 # 使用的模型名称,需要预先使用ollama pull下载 + base_url: http://localhost:11434 # Ollama服务地址 DifyLLM: # 定义LLM API类型 type: dify diff --git a/core/providers/llm/ollama/ollama.py b/core/providers/llm/ollama/ollama.py new file mode 100644 index 00000000..28c377d3 --- /dev/null +++ b/core/providers/llm/ollama/ollama.py @@ -0,0 +1,45 @@ +import logging +import requests, json +from core.providers.llm.base import LLMProviderBase + +logger = logging.getLogger(__name__) + + +class LLMProvider(LLMProviderBase): + def __init__(self, config): + + self.model_name = config.get("model_name") + self.base_url = config.get("base_url", "http://localhost:11434") + + def response(self, session_id, dialogue): + try: + # Convert dialogue format to Ollama format + prompt = "" + for msg in dialogue: + if msg["role"] == "system": + prompt += f"System: {msg['content']}\n" + elif msg["role"] == "user": + prompt += f"User: {msg['content']}\n" + elif msg["role"] == "assistant": + prompt += f"Assistant: {msg['content']}\n" + + # Make request to Ollama API + response = requests.post( + f"{self.base_url}/api/generate", + json={ + "model": self.model_name, + "prompt": prompt, + "stream": True + }, + stream=True + ) + + for line in response.iter_lines(): + if line: + json_response = json.loads(line) + if "response" in json_response: + yield json_response["response"] + + except Exception as e: + logger.error(f"Error in Ollama response generation: {e}") + yield "【Ollama服务响应异常】"