feat: AI dialogue nodes support historical chat history parameters (#4245)
parent
47c27e58f7
commit
586c3536ca
|
|
@ -17,7 +17,6 @@ from django.db.models import QuerySet
|
||||||
from langchain.schema import HumanMessage, SystemMessage
|
from langchain.schema import HumanMessage, SystemMessage
|
||||||
from langchain_core.messages import BaseMessage, AIMessage
|
from langchain_core.messages import BaseMessage, AIMessage
|
||||||
|
|
||||||
|
|
||||||
from application.flow.i_step_node import NodeResult, INode
|
from application.flow.i_step_node import NodeResult, INode
|
||||||
from application.flow.step_node.ai_chat_step_node.i_chat_node import IChatNode
|
from application.flow.step_node.ai_chat_step_node.i_chat_node import IChatNode
|
||||||
from application.flow.tools import Reasoning, mcp_response_generator
|
from application.flow.tools import Reasoning, mcp_response_generator
|
||||||
|
|
@ -91,7 +90,6 @@ def write_context_stream(node_variable: Dict, workflow_variable: Dict, node: INo
|
||||||
_write_context(node_variable, workflow_variable, node, workflow, answer, reasoning_content)
|
_write_context(node_variable, workflow_variable, node, workflow, answer, reasoning_content)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def write_context(node_variable: Dict, workflow_variable: Dict, node: INode, workflow):
|
def write_context(node_variable: Dict, workflow_variable: Dict, node: INode, workflow):
|
||||||
"""
|
"""
|
||||||
写入上下文数据
|
写入上下文数据
|
||||||
|
|
@ -194,12 +192,16 @@ class BaseChatNode(IChatNode):
|
||||||
if stream:
|
if stream:
|
||||||
r = chat_model.stream(message_list)
|
r = chat_model.stream(message_list)
|
||||||
return NodeResult({'result': r, 'chat_model': chat_model, 'message_list': message_list,
|
return NodeResult({'result': r, 'chat_model': chat_model, 'message_list': message_list,
|
||||||
'history_message': history_message, 'question': question.content}, {},
|
'history_message': [{'content': message.content, 'role': message.type} for message in
|
||||||
|
(history_message if history_message is not None else [])],
|
||||||
|
'question': question.content}, {},
|
||||||
_write_context=write_context_stream)
|
_write_context=write_context_stream)
|
||||||
else:
|
else:
|
||||||
r = chat_model.invoke(message_list)
|
r = chat_model.invoke(message_list)
|
||||||
return NodeResult({'result': r, 'chat_model': chat_model, 'message_list': message_list,
|
return NodeResult({'result': r, 'chat_model': chat_model, 'message_list': message_list,
|
||||||
'history_message': history_message, 'question': question.content}, {},
|
'history_message': [{'content': message.content, 'role': message.type} for message in
|
||||||
|
(history_message if history_message is not None else [])],
|
||||||
|
'question': question.content}, {},
|
||||||
_write_context=write_context)
|
_write_context=write_context)
|
||||||
|
|
||||||
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids,
|
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids,
|
||||||
|
|
@ -250,7 +252,9 @@ class BaseChatNode(IChatNode):
|
||||||
r = mcp_response_generator(chat_model, message_list, json.dumps(mcp_servers_config), mcp_output_enable)
|
r = mcp_response_generator(chat_model, message_list, json.dumps(mcp_servers_config), mcp_output_enable)
|
||||||
return NodeResult(
|
return NodeResult(
|
||||||
{'result': r, 'chat_model': chat_model, 'message_list': message_list,
|
{'result': r, 'chat_model': chat_model, 'message_list': message_list,
|
||||||
'history_message': history_message, 'question': question.content}, {},
|
'history_message': [{'content': message.content, 'role': message.type} for message in
|
||||||
|
(history_message if history_message is not None else [])],
|
||||||
|
'question': question.content}, {},
|
||||||
_write_context=write_context_stream)
|
_write_context=write_context_stream)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
@ -316,9 +320,7 @@ class BaseChatNode(IChatNode):
|
||||||
"index": index,
|
"index": index,
|
||||||
'run_time': self.context.get('run_time'),
|
'run_time': self.context.get('run_time'),
|
||||||
'system': self.context.get('system'),
|
'system': self.context.get('system'),
|
||||||
'history_message': [{'content': message.content, 'role': message.type} for message in
|
'history_message': self.context.get('history_message'),
|
||||||
(self.context.get('history_message') if self.context.get(
|
|
||||||
'history_message') is not None else [])],
|
|
||||||
'question': self.context.get('question'),
|
'question': self.context.get('question'),
|
||||||
'answer': self.context.get('answer'),
|
'answer': self.context.get('answer'),
|
||||||
'reasoning_content': self.context.get('reasoning_content'),
|
'reasoning_content': self.context.get('reasoning_content'),
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,7 @@ export default {
|
||||||
},
|
},
|
||||||
defaultPrompt: 'Known Information',
|
defaultPrompt: 'Known Information',
|
||||||
think: 'Thinking Process',
|
think: 'Thinking Process',
|
||||||
|
historyMessage: 'Historical chat records',
|
||||||
},
|
},
|
||||||
searchKnowledgeNode: {
|
searchKnowledgeNode: {
|
||||||
label: 'Knowledge Retrieval',
|
label: 'Knowledge Retrieval',
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,7 @@ export default {
|
||||||
},
|
},
|
||||||
defaultPrompt: '已知信息',
|
defaultPrompt: '已知信息',
|
||||||
think: '思考过程',
|
think: '思考过程',
|
||||||
|
historyMessage: '历史聊天记录',
|
||||||
},
|
},
|
||||||
searchKnowledgeNode: {
|
searchKnowledgeNode: {
|
||||||
label: '知识库检索',
|
label: '知识库检索',
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,7 @@ export default {
|
||||||
},
|
},
|
||||||
defaultPrompt: '已知信息',
|
defaultPrompt: '已知信息',
|
||||||
think: '思考過程',
|
think: '思考過程',
|
||||||
|
historyMessage: '歷史聊天記錄',
|
||||||
},
|
},
|
||||||
searchKnowledgeNode: {
|
searchKnowledgeNode: {
|
||||||
label: '知識庫檢索',
|
label: '知識庫檢索',
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,10 @@ export const aiChatNode = {
|
||||||
label: t('views.applicationWorkflow.nodes.aiChatNode.think'),
|
label: t('views.applicationWorkflow.nodes.aiChatNode.think'),
|
||||||
value: 'reasoning_content',
|
value: 'reasoning_content',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: t('views.applicationWorkflow.nodes.aiChatNode.historyMessage'),
|
||||||
|
value: 'history_message',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -463,7 +463,6 @@ const openGeneratePromptDialog = (modelId: string) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const replace = (v: any) => {
|
const replace = (v: any) => {
|
||||||
console.log(props.nodeModel.properties.node_data.model_setting)
|
|
||||||
set(props.nodeModel.properties.node_data, 'system', v)
|
set(props.nodeModel.properties.node_data, 'system', v)
|
||||||
}
|
}
|
||||||
const openReasoningParamSettingDialog = () => {
|
const openReasoningParamSettingDialog = () => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue