feat: 为agent封装为tool调用添加了runtimeconfig,可以传递记忆

This commit is contained in:
miluELK 2025-10-28 08:22:52 +08:00
parent 48c4283554
commit ad8e26c654
2 changed files with 20 additions and 5 deletions

View File

@ -9,9 +9,11 @@ from typing import Annotated
from langchain.messages import AnyMessage from langchain.messages import AnyMessage
from langgraph.graph import add_messages from langgraph.graph import add_messages
from src.agents.common.state import BaseState
@dataclass @dataclass
class State: class State(BaseState):
"""Defines the input state for the agent, representing a narrower interface to the outside world. """Defines the input state for the agent, representing a narrower interface to the outside world.
This class is used to define the initial state and structure of incoming data. This class is used to define the initial state and structure of incoming data.

View File

@ -2,6 +2,7 @@ import os
from typing import Any from typing import Any
from langchain.tools import tool from langchain.tools import tool
from langchain_core.runnables import RunnableConfig
from src.agents import agent_manager from src.agents import agent_manager
from src.agents.common.toolkits.mysql import get_mysql_tools from src.agents.common.toolkits.mysql import get_mysql_tools
@ -11,19 +12,25 @@ from src.utils import logger
# TODO[修改建议]:能不能通过前端直接指定子智能体? # TODO[修改建议]:能不能通过前端直接指定子智能体?
# 调用子智能体后的日志是输出到tool_calls的 # 调用子智能体后的日志是输出到tool_calls的
@tool(name_or_callable="对话聊天智能体", description="调用指定智能体进行对话聊天的功能") @tool(name_or_callable="对话聊天智能体", description="调用指定智能体进行对话聊天的功能")
async def call_chatbot(query: str) -> str: async def call_chatbot(query: str, config: RunnableConfig) -> str:
""" """
调用指定chatbot智能体进行对话聊天的功能 调用指定chatbot智能体进行对话聊天的功能
Args: Args:
query: 根据需要构造的提问 query: 根据需要构造的提问
config: LangGraph运行时配置(自动注入)
Returns: Returns:
str: 最终的回答结果 str: 最终的回答结果
""" """
try: try:
input = [{"role": "user", "content": query}] input = [{"role": "user", "content": query}]
chatbot = agent_manager.get_agent("ChatbotAgent") chatbot = agent_manager.get_agent("ChatbotAgent")
message = await chatbot.invoke_messages(input) configurable = config.get("configurable",{})
input_context = {
"thread_id":configurable.get("thread_id"),
"user_id": configurable.get("user_id"),
}
message = await chatbot.invoke_messages(input,input_context=input_context)
# 直接获取最后一个消息的内容 # 直接获取最后一个消息的内容
final_answer = message.get('messages', [])[-1].content final_answer = message.get('messages', [])[-1].content
logger.info(f"ChatbotAgent: {final_answer}") logger.info(f"ChatbotAgent: {final_answer}")
@ -33,19 +40,25 @@ async def call_chatbot(query: str) -> str:
raise raise
@tool(name_or_callable="加密计算智能体", description="调用指定智能体进行加密计算的功能") @tool(name_or_callable="加密计算智能体", description="调用指定智能体进行加密计算的功能")
async def call_react_agent(query: str) -> str: async def call_react_agent(query: str, config: RunnableConfig) -> str:
""" """
调用指定智能体进行加密计算的功能 调用指定智能体进行加密计算的功能
Args: Args:
query: 根据需要构造的提问 query: 根据需要构造的提问
config: LangGraph运行时配置(自动注入)
Returns: Returns:
str: 最终的回答结果 str: 最终的回答结果
""" """
try: try:
input = [{"role": "user", "content": query}] input = [{"role": "user", "content": query}]
chatbot = agent_manager.get_agent("ReActAgent") chatbot = agent_manager.get_agent("ReActAgent")
message = await chatbot.invoke_messages(input) configurable = config.get("configurable",{})
input_context = {
"thread_id":configurable.get("thread_id"),
"user_id": configurable.get("user_id"),
}
message = await chatbot.invoke_messages(input,input_context=input_context)
# 直接获取最后一个消息的内容 # 直接获取最后一个消息的内容
final_answer = message.get('messages', [])[-1].content final_answer = message.get('messages', [])[-1].content
logger.info(f"ReActAgent: {final_answer}") logger.info(f"ReActAgent: {final_answer}")