mirror of
https://github.com/hoshikawa2/agent_platform_oci.git
synced 2026-07-10 06:14:20 +00:00
99 lines
3.3 KiB
Python
99 lines
3.3 KiB
Python
from app.agents.prompting import apply_agent_profile_prompt
|
|
from app.agents.runtime import AgentRuntimeMixin
|
|
|
|
|
|
class BillingAgent(AgentRuntimeMixin):
|
|
name = "billingAgent"
|
|
|
|
def __init__(
|
|
self,
|
|
llm,
|
|
telemetry=None,
|
|
tool_router=None,
|
|
rag_service=None,
|
|
cache=None,
|
|
settings=None,
|
|
observer=None,
|
|
memory=None,
|
|
summary_memory=None,
|
|
):
|
|
self.llm = llm
|
|
self.telemetry = telemetry
|
|
self.tool_router = tool_router
|
|
self.rag_service = rag_service
|
|
self.cache = cache
|
|
self.settings = settings
|
|
self.observer = observer
|
|
self.memory = memory
|
|
self.summary_memory = summary_memory
|
|
|
|
async def run(self, state):
|
|
await self._emit_ic(
|
|
"IC.BILLING_AGENT_STARTED",
|
|
state,
|
|
{"business_component": "faturas"},
|
|
component="agent.billing.start",
|
|
)
|
|
|
|
tool_context = await self._collect_tool_context(state)
|
|
if tool_context:
|
|
await self._emit_ic(
|
|
"IC.BILLING_MCP_CONTEXT_COLLECTED",
|
|
state,
|
|
{"tool_result_count": len(tool_context)},
|
|
component="agent.billing.mcp",
|
|
)
|
|
|
|
rag_context, rag_metadata = await self._retrieve_rag_context(state)
|
|
if rag_metadata.get("enabled"):
|
|
await self._emit_ic(
|
|
"IC.BILLING_RAG_CONTEXT_RETRIEVED",
|
|
state,
|
|
{
|
|
"document_count": rag_metadata.get("document_count"),
|
|
"graph_neighbors": rag_metadata.get("graph_neighbors"),
|
|
"latency_ms": rag_metadata.get("latency_ms"),
|
|
},
|
|
component="agent.billing.rag",
|
|
)
|
|
|
|
# Prepara ConversationSummaryMemory antes de montar o prompt.
|
|
# O build_messages() do framework injeta resumo + últimas mensagens quando habilitado.
|
|
await self.prepare_memory_context(state)
|
|
|
|
messages = self.build_messages(
|
|
state,
|
|
system_prompt=apply_agent_profile_prompt(
|
|
state,
|
|
"Você é um agente especialista em faturas. Responda com clareza, objetividade e sem sugerir ações não solicitadas. Use dados MCP quando disponíveis.",
|
|
),
|
|
mcp_results=tool_context,
|
|
rag_context=rag_context,
|
|
rag_metadata=rag_metadata,
|
|
)
|
|
|
|
answer = await self._invoke_llm_cached(state, "BillingAgent", messages)
|
|
result = {
|
|
"answer": f"[BillingAgent] {answer}",
|
|
"next_state": "BILLING_ACTIVE",
|
|
"mcp_results": tool_context,
|
|
"rag": rag_metadata,
|
|
"memory_context_metadata": state.get("memory_context_metadata"),
|
|
}
|
|
|
|
await self._emit_ic(
|
|
"IC.BILLING_AGENT_COMPLETED",
|
|
state,
|
|
{
|
|
"answer_chars": len(result.get("answer") or ""),
|
|
"has_mcp_results": bool(tool_context),
|
|
"rag_enabled": bool(rag_metadata.get("enabled")),
|
|
"memory_context": state.get("memory_context_metadata"),
|
|
},
|
|
component="agent.billing.completed",
|
|
)
|
|
return result
|
|
|
|
async def _collect_tool_context(self, state):
|
|
return await self._collect_mcp_context(state)
|