| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """Agent基类"""
- from abc import ABC, abstractmethod
- from typing import Optional, Iterator
- from .message import Message
- from .llm import HelloAgentsLLM
- from .config import Config
- from .stream import StreamEvent
- from .conversation_manager import ConversationManager
- class Agent(ABC):
- """Agent基类"""
- def __init__(
- self,
- name: str,
- llm: HelloAgentsLLM,
- system_prompt: Optional[str] = None,
- config: Optional[Config] = None,
- conversation_manager: Optional[ConversationManager] = None,
- ):
- self.name = name
- self.llm = llm
- self.system_prompt = system_prompt
- self.config = config or Config()
- self._history: list[Message] = []
- self.conversation_manager = conversation_manager
- def _resolve_history(self, conversation_id: Optional[str] = None) -> list[Message]:
- if self.conversation_manager and conversation_id:
- conv = self.conversation_manager.get_conversation(conversation_id)
- if conv:
- return conv.messages
- return self._history
- def _save_conversation_messages(
- self, input_text: str, response: str, conversation_id: Optional[str] = None
- ) -> None:
- if self.conversation_manager and conversation_id:
- self.conversation_manager.add_message(conversation_id, input_text, "user")
- self.conversation_manager.add_message(
- conversation_id, response, "assistant"
- )
- else:
- self.add_message(Message(input_text, "user"))
- self.add_message(Message(response, "assistant"))
- @abstractmethod
- def run(self, input_text: str, **kwargs) -> str:
- pass
- def stream_run(self, input_text: str, **kwargs) -> Iterator[StreamEvent]:
- result = self.run(input_text, **kwargs)
- yield StreamEvent.text(result)
- yield StreamEvent.done(result)
- def add_message(self, message: Message):
- self._history.append(message)
- def clear_history(self):
- self._history.clear()
- def get_history(self) -> list[Message]:
- return self._history.copy()
- def __str__(self) -> str:
- return f"Agent(name={self.name}, provider={self.llm.provider})"
- def __repr__(self) -> str:
- return self.__str__()
|