fix: direct send tool_call_result

This commit is contained in:
Raven95676
2025-07-05 22:08:17 +08:00
committed by Soulter
parent b8c1b53d67
commit 69d3ae709c
4 changed files with 24 additions and 9 deletions
@@ -106,7 +106,6 @@ class ToolLoopAgent(BaseAgentRunner):
# 处理 LLM 响应
llm_resp = llm_resp_result
logger.debug(f"LLMResp: {llm_resp}")
if llm_resp.role == "err":
# 如果 LLM 响应错误,转换到错误状态
@@ -177,7 +177,10 @@ class LLMRequestSubStage(Stage):
if event.is_stopped():
return
if resp.type == "tool_call_result":
continue # 跳过工具调用结果
# 处理工具调用结果,直接发送给用户
resp.data["chain"].type = "tool_call_result"
await event.send(resp.data["chain"])
continue
if resp.type == "tool_call":
if self.streaming_response:
# 用来标记流式响应需要分节
@@ -254,11 +257,11 @@ class LLMRequestSubStage(Stage):
# 异步处理 WebChat 特殊情况
if event.get_platform_name() == "webchat":
asyncio.create_task(self._handle_webchat(event, req))
asyncio.create_task(self._handle_webchat(event, req, provider))
await self._save_to_history(event, req, tool_loop_agent.get_final_llm_resp())
async def _handle_webchat(self, event: AstrMessageEvent, req: ProviderRequest):
async def _handle_webchat(self, event: AstrMessageEvent, req: ProviderRequest, prov: Provider):
"""处理 WebChat 平台的特殊情况,包括第一次 LLM 对话时总结对话内容生成 title"""
conversation = await self.conv_manager.get_conversation(
event.unified_msg_origin, req.conversation.cid
@@ -268,10 +271,9 @@ class LLMRequestSubStage(Stage):
latest_pair = messages[-2:]
if not latest_pair:
return
provider = self.ctx.plugin_manager.context.get_using_provider()
cleaned_text = "User: " + latest_pair[0].get("content", "").strip()
logger.debug(f"WebChat 对话标题生成请求,清理后的文本: {cleaned_text}")
llm_resp = await provider.text_chat(
llm_resp = await prov.text_chat(
system_prompt="You are expert in summarizing user's query.",
prompt=(
f"Please summarize the following query of user:\n"
@@ -333,7 +335,6 @@ class LLMRequestSubStage(Stage):
await self.conv_manager.update_conversation(
event.unified_msg_origin, req.conversation.cid, history=messages
)
logger.debug(f"messages persisted: {messages}")
def fix_messages(self, messages: list[dict]) -> list[dict]:
"""验证并且修复上下文"""
-1
View File
@@ -1473,7 +1473,6 @@ export default {
.message-bubble {
padding: 8px 16px;
border-radius: 12px;
max-width: 80%;
}
.user-bubble {
+17 -1
View File
@@ -10,6 +10,7 @@ import astrbot.api.event.filter as filter
from astrbot.api.event import AstrMessageEvent, MessageEventResult
from astrbot.api import sp
from astrbot.api.provider import ProviderRequest
from astrbot.core import DEMO_MODE
from astrbot.core.platform.astr_message_event import MessageSesion
from astrbot.core.platform.message_type import MessageType
from astrbot.core.provider.entities import ProviderType
@@ -59,7 +60,7 @@ class RstScene(Enum):
name="astrbot",
desc="AstrBot 基础指令结合 + 拓展功能",
author="Soulter",
version="4.0.0",
version="4.0.1",
)
class Main(star.Star):
def __init__(self, context: star.Context) -> None:
@@ -233,6 +234,11 @@ class Main(star.Star):
@plugin.command("off")
async def plugin_off(self, event: AstrMessageEvent, plugin_name: str = None):
"""禁用插件"""
if DEMO_MODE:
event.set_result(
MessageEventResult().message("演示模式下无法禁用插件。")
)
return
if not plugin_name:
event.set_result(
MessageEventResult().message("/plugin off <插件名> 禁用插件。")
@@ -245,6 +251,11 @@ class Main(star.Star):
@plugin.command("on")
async def plugin_on(self, event: AstrMessageEvent, plugin_name: str = None):
"""启用插件"""
if DEMO_MODE:
event.set_result(
MessageEventResult().message("演示模式下无法启用插件。")
)
return
if not plugin_name:
event.set_result(
MessageEventResult().message("/plugin on <插件名> 启用插件。")
@@ -257,6 +268,11 @@ class Main(star.Star):
@plugin.command("get")
async def plugin_get(self, event: AstrMessageEvent, plugin_repo: str = None):
"""安装插件"""
if DEMO_MODE:
event.set_result(
MessageEventResult().message("演示模式下无法安装插件。")
)
return
if not plugin_repo:
event.set_result(
MessageEventResult().message("/plugin get <插件仓库地址> 安装插件")