构建多模型协同的Ollama智能对话系统
在人工智能应用中,单一模型往往难以满足复杂场景的需求。本文将介绍如何整合多个Ollama模型,构建一个智能对话系统,实现情感分析、危机评估和智能回复的协同功能。
系统架构
该系统采用多模型pipeline架构,包含三个核心组件:
- 情感分析模型 (Qwen-7B)
- 危机评估模型 (MindPal)
- 主对话模型 (PsychologistV2)
技术实现
1. 基础架构设计
首先,我们定义了一个OllamaModelPipeline
类来管理多个模型的调用:
python
class OllamaModelPipeline:
def __init__(self):
self.endpoints = {
'emotion': 'http://localhost:11435', # qwen:7b
'main': 'http://localhost:11436', # psychologistv2
'crisis': 'http://localhost:11437' # mindpal
}
2. 模型调用接口
实现统一的模型调用接口,确保与不同模型的交互一致性:
python
def call_model(self, model_name: str, prompt: str) -> Dict[Any, Any]:
endpoint = self.endpoints[model_name]
model_map = {
'emotion': 'qwen:7b',
'main': 'ALIENTELLIGENCE/psychologistv2:latest',
'crisis': 'ALIENTELLIGENCE/mindpal:latest'
}
response = requests.post(
f"{endpoint}/api/generate",
json={
"model": model_map[model_name],
"prompt": prompt
}
)
return response.json()
3. 多模型协同处理流程
系统采用瀑布式的处理流程:
-
情感分析阶段
pythonemotion_prompt = f"分析以下文本的情绪状态,用简短的关键词回答: {user_input}" emotion_result = self.call_model('emotion', emotion_prompt)
-
条件式危机评估
pythonif "悲伤" in emotion_result['response'] or "焦虑" in emotion_result['response']: crisis_prompt = f"以下是用户的输入,请评估是否需要危机干预,给出建议:{user_input}" crisis_result = self.call_model('crisis', crisis_prompt)
-
上下文感知的回应生成
pythoncontext = f""" 用户输入: {user_input} 情绪分析: {emotion_result['response']} 危机评估: {crisis_result['response']} 请根据以上信息,生成适当的回应。 """ main_result = self.call_model('main', context)
系统特点
-
模块化设计
- 各模型独立部署
- 统一的接口封装
- 易于扩展和维护
-
智能流程控制
- 基于情绪触发危机评估
- 上下文信息传递
- 错误处理机制
-
资源优化
- 按需调用模型
- 并行部署提升性能
- 独立端口避免冲突
使用示例
python
pipeline = OllamaModelPipeline()
result = pipeline.analyze_user_input("我最近感觉很困扰,工作压力很大")
print("\n分析结果:")
print(f"情绪分析: {result['emotion_analysis']}")
print(f"危机评估: {result['crisis_assessment']}")
print(f"AI回应: {result['response']}")
实际应用场景
-
心理咨询辅助
- 快速情绪识别
- 及时危机干预
- 个性化回应生成
-
客服系统增强
- 情绪感知服务
- 智能话术调整
- 多层次响应机制
-
社交媒体监控
- 情绪趋势分析
- 危机预警系统
- 智能回复建议
未来优化方向
-
模型优化
- 引入更专业的情感分析模型
- 优化危机评估准确度
- 增强回复个性化程度
-
系统增强
- 添加会话历史记忆
- 实现多轮对话管理
- 引入更多专业领域模型
-
性能提升
- 实现模型结果缓存
- 优化请求并发处理
- 添加负载均衡机制
完整代码
bash
import requests
import json
from typing import Dict, Any
class OllamaModelPipeline:
def __init__(self):
# 定义模型端点
self.endpoints = {
'emotion': 'http://localhost:11435', # qwen:7b
'main': 'http://localhost:11436', # psychologistv2
'crisis': 'http://localhost:11437' # mindpal
}
def call_model(self, model_name: str, prompt: str) -> Dict[Any, Any]:
"""调用指定的模型"""
endpoint = self.endpoints[model_name]
model_map = {
'emotion': 'qwen:7b',
'main': 'ALIENTELLIGENCE/psychologistv2:latest',
'crisis': 'ALIENTELLIGENCE/mindpal:latest'
}
response = requests.post(
f"{endpoint}/api/generate",
json={
"model": model_map[model_name],
"prompt": prompt
}
)
return response.json()
def analyze_user_input(self, user_input: str) -> Dict[str, Any]:
"""使用多个模型分析用户输入"""
# 1. 使用情感分析模型评估情绪
emotion_prompt = f"分析以下文本的情绪状态,用简短的关键词回答: {user_input}"
emotion_result = self.call_model('emotion', emotion_prompt)
# 2. 根据情绪状态决定是否需要危机干预
if "悲伤" in emotion_result['response'] or "焦虑" in emotion_result['response']:
crisis_prompt = f"以下是用户的输入,请评估是否需要危机干预,给出建议:{user_input}"
crisis_result = self.call_model('crisis', crisis_prompt)
else:
crisis_result = {"response": "无需危机干预"}
# 3. 使用主模型生成回应
context = f"""
用户输入: {user_input}
情绪分析: {emotion_result['response']}
危机评估: {crisis_result['response']}
请根据以上信息,生成适当的回应。
"""
main_result = self.call_model('main', context)
return {
"emotion_analysis": emotion_result['response'],
"crisis_assessment": crisis_result['response'],
"response": main_result['response']
}
def main():
pipeline = OllamaModelPipeline()
print("欢迎使用多模型分析系统!输入 'quit' 退出")
while True:
user_input = input("\n请输入您想说的话: ")
if user_input.lower() == 'quit':
break
try:
result = pipeline.analyze_user_input(user_input)
print("\n分析结果:")
print(f"情绪分析: {result['emotion_analysis']}")
print(f"危机评估: {result['crisis_assessment']}")
print(f"AI回应: {result['response']}")
except Exception as e:
print(f"发生错误: {str(e)}")
if __name__ == "__main__":
main()