mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-26 00:53:54 +08:00
添加工作流和文本生成模式
This commit is contained in:
@@ -186,6 +186,10 @@ LLM:
|
|||||||
# 如果使用DifyLLM,配置文件里prompt(提示词)是无效的,需要在dify控制台设置提示词
|
# 如果使用DifyLLM,配置文件里prompt(提示词)是无效的,需要在dify控制台设置提示词
|
||||||
base_url: https://api.dify.cn/v1
|
base_url: https://api.dify.cn/v1
|
||||||
api_key: 你的DifyLLM web key
|
api_key: 你的DifyLLM web key
|
||||||
|
# 使用的对话模式 可以选择工作流 workflows/run 对话模式 chat-messages 文本生成 completion-messages
|
||||||
|
# 使用workflows进行返回的时候输入参数为 query 返回参数的名字要设置为 answer
|
||||||
|
# 文本生成的默认输入参数也是query
|
||||||
|
mode: workflows/run
|
||||||
GeminiLLM:
|
GeminiLLM:
|
||||||
type: gemini
|
type: gemini
|
||||||
# 谷歌Gemini API,需要先在Google Cloud控制台创建API密钥并获取api_key
|
# 谷歌Gemini API,需要先在Google Cloud控制台创建API密钥并获取api_key
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ logger = setup_logging()
|
|||||||
class LLMProvider(LLMProviderBase):
|
class LLMProvider(LLMProviderBase):
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.api_key = config["api_key"]
|
self.api_key = config["api_key"]
|
||||||
|
self.mode = config.get("mode", "workflows/run")
|
||||||
self.base_url = config.get("base_url", "https://api.dify.ai/v1").rstrip('/')
|
self.base_url = config.get("base_url", "https://api.dify.ai/v1").rstrip('/')
|
||||||
self.session_conversation_map = {} # 存储session_id和conversation_id的映射
|
self.session_conversation_map = {} # 存储session_id和conversation_id的映射
|
||||||
|
|
||||||
@@ -19,27 +20,59 @@ class LLMProvider(LLMProviderBase):
|
|||||||
conversation_id = self.session_conversation_map.get(session_id)
|
conversation_id = self.session_conversation_map.get(session_id)
|
||||||
|
|
||||||
# 发起流式请求
|
# 发起流式请求
|
||||||
with requests.post(
|
if self.mode == "chat-messages":
|
||||||
f"{self.base_url}/chat-messages",
|
request_json = {
|
||||||
headers={"Authorization": f"Bearer {self.api_key}"},
|
|
||||||
json={
|
|
||||||
"query": last_msg["content"],
|
"query": last_msg["content"],
|
||||||
"response_mode": "streaming",
|
"response_mode": "streaming",
|
||||||
"user": session_id,
|
"user": session_id,
|
||||||
"inputs": {},
|
"inputs": {},
|
||||||
"conversation_id": conversation_id
|
"conversation_id": conversation_id
|
||||||
},
|
}
|
||||||
|
elif self.mode == "workflows/run":
|
||||||
|
request_json = {
|
||||||
|
"inputs": {"query": last_msg["content"]},
|
||||||
|
"response_mode": "streaming",
|
||||||
|
"user": session_id
|
||||||
|
}
|
||||||
|
elif self.mode == "completion-messages":
|
||||||
|
request_json = {
|
||||||
|
"inputs": {"query": last_msg["content"]},
|
||||||
|
"response_mode": "streaming",
|
||||||
|
"user": session_id
|
||||||
|
}
|
||||||
|
|
||||||
|
with requests.post(
|
||||||
|
f"{self.base_url}/{self.mode}",
|
||||||
|
headers={"Authorization": f"Bearer {self.api_key}"},
|
||||||
|
json=request_json,
|
||||||
stream=True
|
stream=True
|
||||||
) as r:
|
) as r:
|
||||||
for line in r.iter_lines():
|
if self.mode == "chat-messages":
|
||||||
if line.startswith(b'data: '):
|
for line in r.iter_lines():
|
||||||
event = json.loads(line[6:])
|
if line.startswith(b'data: '):
|
||||||
# 如果没有找到conversation_id,则获取此次conversation_id
|
event = json.loads(line[6:])
|
||||||
if not conversation_id:
|
# 如果没有找到conversation_id,则获取此次conversation_id
|
||||||
conversation_id = event.get('conversation_id')
|
if not conversation_id:
|
||||||
self.session_conversation_map[session_id] = conversation_id # 更新映射
|
conversation_id = event.get('conversation_id')
|
||||||
if event.get('answer'):
|
self.session_conversation_map[session_id] = conversation_id # 更新映射
|
||||||
yield event['answer']
|
if event.get('answer'):
|
||||||
|
yield event['answer']
|
||||||
|
elif self.mode == "workflows/run":
|
||||||
|
for line in r.iter_lines():
|
||||||
|
# logger.bind(tag=TAG).info(f"chat message response: {line}")
|
||||||
|
if line.startswith(b'data: '):
|
||||||
|
event = json.loads(line[6:])
|
||||||
|
if event.get('event') == "workflow_finished":
|
||||||
|
if event['data']['status'] == "succeeded":
|
||||||
|
yield event['data']['outputs']['answer']
|
||||||
|
else:
|
||||||
|
yield "【服务响应异常】"
|
||||||
|
elif self.mode == "completion-messages":
|
||||||
|
for line in r.iter_lines():
|
||||||
|
if line.startswith(b'data: '):
|
||||||
|
event = json.loads(line[6:])
|
||||||
|
if event.get('answer'):
|
||||||
|
yield event['answer']
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.bind(tag=TAG).error(f"Error in response generation: {e}")
|
logger.bind(tag=TAG).error(f"Error in response generation: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user