init
This commit is contained in:
+4
-74
@@ -1,76 +1,6 @@
|
||||
from typing import Any, Dict, List, Optional
|
||||
from langchain_core.messages import BaseMessage, HumanMessage
|
||||
from langchain_openai import ChatOpenAI
|
||||
from langgraph.graph import StateGraph, END
|
||||
from config import Config
|
||||
"""兼容导出:请优先使用 agent 包"""
|
||||
|
||||
from agent.graph import BaseAgent
|
||||
from agent.state import AgentState
|
||||
|
||||
class AgentState:
|
||||
"""State definition for the agent workflow"""
|
||||
messages: List[BaseMessage]
|
||||
current_step: str
|
||||
context: Dict[str, Any]
|
||||
|
||||
def __init__(self, messages: List[BaseMessage] = None, current_step: str = "start", context: Dict[str, Any] = None):
|
||||
self.messages = messages or []
|
||||
self.current_step = current_step
|
||||
self.context = context or {}
|
||||
|
||||
|
||||
class BaseAgent:
|
||||
"""Base agent class with common functionality"""
|
||||
|
||||
def __init__(self, model_name: str = Config.DEFAULT_MODEL):
|
||||
self.model = ChatOpenAI(
|
||||
model=model_name,
|
||||
api_key=Config.OPENAI_API_KEY,
|
||||
temperature=0.1,
|
||||
max_retries=Config.MAX_RETRIES,
|
||||
timeout=Config.TIMEOUT
|
||||
)
|
||||
self.graph = self._build_graph()
|
||||
|
||||
def _build_graph(self) -> StateGraph:
|
||||
"""Build the state graph for the agent"""
|
||||
workflow = StateGraph(AgentState)
|
||||
|
||||
# Add nodes and edges
|
||||
workflow.add_node("process_input", self._process_input)
|
||||
workflow.add_node("generate_response", self._generate_response)
|
||||
|
||||
# Define edges
|
||||
workflow.add_edge("process_input", "generate_response")
|
||||
workflow.add_edge("generate_response", END)
|
||||
|
||||
# Set entry point
|
||||
workflow.set_entry_point("process_input")
|
||||
|
||||
return workflow.compile()
|
||||
|
||||
def _process_input(self, state: AgentState) -> AgentState:
|
||||
"""Process user input"""
|
||||
# This is a base implementation - subclasses should override
|
||||
state.current_step = "processed"
|
||||
return state
|
||||
|
||||
def _generate_response(self, state: AgentState) -> AgentState:
|
||||
"""Generate response using the LLM"""
|
||||
if state.messages:
|
||||
response = self.model.invoke(state.messages)
|
||||
state.messages.append(response)
|
||||
return state
|
||||
|
||||
def run(self, user_input: str, **kwargs) -> Dict[str, Any]:
|
||||
"""Run the agent with user input"""
|
||||
initial_state = AgentState(
|
||||
messages=[HumanMessage(content=user_input)],
|
||||
context=kwargs
|
||||
)
|
||||
|
||||
result = self.graph.invoke(initial_state)
|
||||
|
||||
return {
|
||||
"messages": result.messages,
|
||||
"context": result.context,
|
||||
"final_step": result.current_step
|
||||
}
|
||||
__all__ = ["BaseAgent", "AgentState"]
|
||||
Reference in New Issue
Block a user