mirror of https://github.com/Mai-with-u/MaiBot.git
Update tool_processor.py
parent
c1429717b9
commit
62cab2f3a9
|
|
@ -12,7 +12,7 @@ from .base_processor import BaseProcessor
|
||||||
from typing import List, Optional, Dict
|
from typing import List, Optional, Dict
|
||||||
from src.chat.heart_flow.observation.observation import Observation
|
from src.chat.heart_flow.observation.observation import Observation
|
||||||
from src.chat.focus_chat.info.structured_info import StructuredInfo
|
from src.chat.focus_chat.info.structured_info import StructuredInfo
|
||||||
from src.chat.heart_flow.observation.structure_observation import StructureObservation
|
from src.chat.focus_chat.info.info_base import InfoBase
|
||||||
|
|
||||||
logger = get_logger("processor")
|
logger = get_logger("processor")
|
||||||
|
|
||||||
|
|
@ -22,21 +22,21 @@ def init_prompt():
|
||||||
|
|
||||||
# 添加工具执行器提示词
|
# 添加工具执行器提示词
|
||||||
tool_executor_prompt = """
|
tool_executor_prompt = """
|
||||||
你是一个专门执行工具的助手。你的名字是{bot_name}。现在是{time_now}。
|
You are a specialized tool execution assistant. Your name is {bot_name}. The current time is {time_now}.
|
||||||
|
|
||||||
你当前的额外信息:
|
Your current additional information:
|
||||||
{memory_str}
|
{memory_str}
|
||||||
|
|
||||||
群里正在进行的聊天内容:
|
Current chat content in the group:
|
||||||
{chat_observe_info}
|
{chat_observe_info}
|
||||||
|
|
||||||
请仔细分析聊天内容,考虑以下几点:
|
Please carefully analyze the chat content and consider the following points:
|
||||||
1. 内容中是否包含需要查询信息的问题
|
1. Does the content contain questions that require information queries?
|
||||||
2. 是否需要执行特定操作
|
2. Are there specific operations that need to be executed?
|
||||||
3. 是否有明确的工具使用指令
|
3. Are there explicit tool usage instructions?
|
||||||
4. 考虑用户与你的关系以及当前的对话氛围
|
4. Consider your relationship with the user and the current conversation atmosphere.
|
||||||
|
|
||||||
如果需要使用工具,请直接调用相应的工具函数。如果不需要使用工具,请简单输出"无需使用工具"。
|
If you need to use tools, please directly call the corresponding tool functions. If no tools are needed, simply output "No tools needed".
|
||||||
"""
|
"""
|
||||||
Prompt(tool_executor_prompt, "tool_executor_prompt")
|
Prompt(tool_executor_prompt, "tool_executor_prompt")
|
||||||
|
|
||||||
|
|
@ -51,13 +51,13 @@ class ToolProcessor(BaseProcessor):
|
||||||
self.llm_model = LLMRequest(
|
self.llm_model = LLMRequest(
|
||||||
model=global_config.model.focus_tool_use,
|
model=global_config.model.focus_tool_use,
|
||||||
max_tokens=500,
|
max_tokens=500,
|
||||||
request_type="focus_tool",
|
request_type="tool_execution",
|
||||||
)
|
)
|
||||||
self.structured_info = []
|
self.structured_info = []
|
||||||
|
|
||||||
async def process_info(
|
async def process_info(
|
||||||
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos
|
self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos
|
||||||
) -> List[dict]:
|
) -> List[InfoBase]:
|
||||||
"""处理信息对象
|
"""处理信息对象
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
@ -67,36 +67,24 @@ class ToolProcessor(BaseProcessor):
|
||||||
list: 处理后的结构化信息列表
|
list: 处理后的结构化信息列表
|
||||||
"""
|
"""
|
||||||
|
|
||||||
working_infos = []
|
result_infos = []
|
||||||
|
|
||||||
if observations:
|
if observations:
|
||||||
for observation in observations:
|
for observation in observations:
|
||||||
if isinstance(observation, ChattingObservation):
|
if isinstance(observation, ChattingObservation):
|
||||||
result, used_tools, prompt = await self.execute_tools(observation, running_memorys)
|
# 执行工具调用
|
||||||
|
tool_results, used_tools, _ = await self.execute_tools(observation, running_memorys)
|
||||||
# 更新WorkingObservation中的结构化信息
|
|
||||||
logger.debug(f"工具调用结果: {result}")
|
# 为每个工具调用结果创建StructuredInfo对象并返回
|
||||||
|
for tool_result in tool_results:
|
||||||
for observation in observations:
|
structured_info = StructuredInfo()
|
||||||
if isinstance(observation, StructureObservation):
|
|
||||||
for structured_info in result:
|
structured_info.data[tool_result.get("type")] = tool_result.get("content")
|
||||||
# logger.debug(f"{self.log_prefix} 更新WorkingObservation中的结构化信息: {structured_info}")
|
result_infos.append(structured_info)
|
||||||
observation.add_structured_info(structured_info)
|
logger.info(f"{self.log_prefix} 工具调用成功: {tool_result.get('type')} - {tool_result.get('content')}")
|
||||||
|
|
||||||
working_infos = observation.get_observe_info()
|
logger.debug(f"result_infos: {result_infos}")
|
||||||
logger.debug(f"{self.log_prefix} 获取更新后WorkingObservation中的结构化信息: {working_infos}")
|
return result_infos
|
||||||
|
|
||||||
structured_info = StructuredInfo()
|
|
||||||
if working_infos:
|
|
||||||
for working_info in working_infos:
|
|
||||||
# print(f"working_info: {working_info}")
|
|
||||||
# print(f"working_info.get('type'): {working_info.get('type')}")
|
|
||||||
# print(f"working_info.get('content'): {working_info.get('content')}")
|
|
||||||
structured_info.set_info(key=working_info.get("type"), value=working_info.get("content"))
|
|
||||||
# info = structured_info.get_processed_info()
|
|
||||||
# print(f"info: {info}")
|
|
||||||
|
|
||||||
return [structured_info]
|
|
||||||
|
|
||||||
async def execute_tools(self, observation: ChattingObservation, running_memorys: Optional[List[Dict]] = None):
|
async def execute_tools(self, observation: ChattingObservation, running_memorys: Optional[List[Dict]] = None):
|
||||||
"""
|
"""
|
||||||
|
|
@ -162,7 +150,7 @@ class ToolProcessor(BaseProcessor):
|
||||||
)
|
)
|
||||||
|
|
||||||
# 调用LLM,专注于工具使用
|
# 调用LLM,专注于工具使用
|
||||||
logger.debug(f"开始执行工具调用{prompt}")
|
# logger.debug(f"开始执行工具调用{prompt}")
|
||||||
response, _, tool_calls = await self.llm_model.generate_response_tool_async(prompt=prompt, tools=tools)
|
response, _, tool_calls = await self.llm_model.generate_response_tool_async(prompt=prompt, tools=tools)
|
||||||
|
|
||||||
logger.debug(f"获取到工具原始输出:\n{tool_calls}")
|
logger.debug(f"获取到工具原始输出:\n{tool_calls}")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue