diff --git a/src/mindpilot/app/agent/__init__.py b/src/mindpilot/app/agent/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/mindpilot/app/agent/agents_registry.py b/src/mindpilot/app/agent/agents_registry.py new file mode 100644 index 0000000..dd15a6b --- /dev/null +++ b/src/mindpilot/app/agent/agents_registry.py @@ -0,0 +1,30 @@ +from typing import List, Sequence + +from langchain import hub +from langchain.agents import AgentExecutor, create_structured_chat_agent +from langchain_core.callbacks import BaseCallbackHandler +from langchain_core.language_models import BaseLanguageModel +from langchain_core.messages import SystemMessage +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.tools import BaseTool + + +def agents_registry( + llm: BaseLanguageModel, + tools: Sequence[BaseTool] = [], + callbacks: List[BaseCallbackHandler] = [], + prompt: str = None, + verbose: bool = False, +): + if prompt is not None: + prompt = ChatPromptTemplate.from_messages([SystemMessage(content=prompt)]) + else: + prompt = hub.pull("hwchase17/structured-chat-agent") # default prompt + agent = create_structured_chat_agent(llm=llm, tools=tools, prompt=prompt) + + agent_executor = AgentExecutor( + agent=agent, tools=tools, verbose=verbose, callbacks=callbacks + ) + + return agent_executor + diff --git a/src/mindpilot/app/chat/chat.py b/src/mindpilot/app/chat/chat.py index 67a9a73..8dda372 100644 --- a/src/mindpilot/app/chat/chat.py +++ b/src/mindpilot/app/chat/chat.py @@ -12,8 +12,7 @@ from langchain_core.messages import AIMessage, HumanMessage, convert_to_messages from langchain_core.output_parsers import StrOutputParser from sse_starlette.sse import EventSourceResponse -from chatchat.server.agent.agent_factory.agents_registry import agents_registry -from chatchat.server.agent.container import container +from ..agent.agents_registry import agents_registry from chatchat.server.api_server.api_schemas import OpenAIChatOutput from chatchat.server.callback_handler.agent_callback_handler import ( AgentExecutorAsyncIteratorCallbackHandler, @@ -58,7 +57,6 @@ def create_models_chains( ): memory = None chat_prompt = None - container.metadata = metadata if history: history = [History.from_data(h) for h in history] @@ -96,7 +94,7 @@ def create_models_chains( async def chat( - query: str = Body(..., description="用户输入", examples=["恼羞成怒"]), + query: str = Body(..., description="用户输入"), metadata: dict = Body({}, description="附件,可能是图像或者其他功能", examples=[]), conversation_id: str = Body("", description="对话框ID"), message_id: str = Body(None, description="数据库消息ID"), @@ -106,8 +104,8 @@ async def chat( description="历史对话,设为一个整数可以从数据库中读取历史消息", examples=[ [ - {"role": "user", "content": "我们来玩成语接龙,我先来,生龙活虎"}, - {"role": "assistant", "content": "虎头虎脑"}, + {"role": "user", "content": "你好"}, + {"role": "assistant", "content": "您好,我是智能Agent桌面助手MindPilot,请问有什么可以帮您?"}, ] ], ), @@ -121,19 +119,6 @@ async def chat( callback = AgentExecutorAsyncIteratorCallbackHandler() callbacks = [callback] - # Enable langchain-chatchat to support langfuse - import os - - langfuse_secret_key = os.environ.get("LANGFUSE_SECRET_KEY") - langfuse_public_key = os.environ.get("LANGFUSE_PUBLIC_KEY") - langfuse_host = os.environ.get("LANGFUSE_HOST") - if langfuse_secret_key and langfuse_public_key and langfuse_host: - from langfuse import Langfuse - from langfuse.callback import CallbackHandler - - langfuse_handler = CallbackHandler() - callbacks.append(langfuse_handler) - models, prompts = create_models_from_config( callbacks=callbacks, configs=chat_model_config, stream=stream ) @@ -220,16 +205,7 @@ async def chat( message_id=message_id, ) yield ret.model_dump_json() - # yield OpenAIChatOutput( # return blank text lastly - # id=f"chat{uuid.uuid4()}", - # object="chat.completion.chunk", - # content="", - # role="assistant", - # model=models["llm_model"].model_name, - # status = data["status"], - # message_type = data["message_type"], - # message_id=message_id, - # ) + await task if stream: diff --git a/src/mindpilot/app/tools/__init__.py b/src/mindpilot/app/tools/__init__.py new file mode 100644 index 0000000..e69de29