This commit is contained in:
2026-03-06 14:39:42 +08:00
parent f06bfb1fa0
commit 3020ae4691
4 changed files with 197 additions and 11 deletions

View File

@@ -6,7 +6,7 @@ from pydantic import BaseModel, Field
from pydantic_ai import RunContext
from core.schema import StandardResponse
from services.dispatch_service import dispatch_service
from db.chat_log_db import get_conversation
from db.chat_log_db import get_conversation, get_customer_orders
logger = logging.getLogger("cs_agent")
@@ -35,9 +35,53 @@ async def transfer_to_human_tool(ctx: RunContext[Any], reason: str = Field(descr
return "ERROR_DESIGNER_BUSY设计师暂时不在位你告诉客户稍等马上帮忙联系设计师。不要说下班。"
async def check_order_status_tool(ctx: RunContext[Any], customer_id: str = Field(description="客户ID")) -> str:
"""查询订单状态。"""
return "我在帮你加急处理中,稍等哈。"
async def lookup_customer_orders_tool(
ctx: RunContext[Any],
customer_id: str = Field(description="客户ID从当前对话上下文中获取"),
) -> str:
"""
【订单查询工具】查询该客户的订单记录(订单号、状态、金额等)。
使用场景:
- 客户问"我的订单怎么样了""付款了""发货了吗"
- 客户提到订单号
- 需要确认客户是否已付款
返回该客户的所有订单及其状态。
"""
logger.info(f"[Tool] 查询客户订单: customer_id={customer_id}")
try:
rows = await asyncio.to_thread(get_customer_orders, customer_id, limit=10)
if not rows:
return f"该客户({customer_id})暂无订单记录。"
lines = []
for r in rows:
oid = r.get("order_id", "")
status = r.get("order_status", "")
amount = r.get("amount", 0)
qty = r.get("quantity", 0)
title = r.get("product_title", "")
note = r.get("buyer_note", "")
updated = str(r.get("updated_at", ""))
line = f"订单号:{oid} 状态:{status} 金额:{amount}元 数量:{qty} 商品:{title}"
if note:
line += f" 备注:{note}"
line += f" 更新时间:{updated}"
lines.append(line)
has_paid = any("已付款" in r.get("order_status", "") for r in rows)
has_shipped = any("已发货" in r.get("order_status", "") for r in rows)
summary_parts = [f"{len(rows)}条订单记录。"]
if has_paid:
summary_parts.append("客户已付款!")
if has_shipped:
summary_parts.append("已发货。")
summary = " ".join(summary_parts)
return f"【订单摘要】{summary}\n\n【订单详情】\n" + "\n".join(lines)
except Exception as e:
logger.error(f"[Tool] 查询订单失败: {e}")
return f"查询订单失败: {e}"
async def lookup_chat_history_tool(
@@ -92,6 +136,6 @@ async def lookup_chat_history_tool(
def register_agent_tools(agent: Any):
"""注册工具"""
agent.tool(transfer_to_human_tool)
agent.tool(check_order_status_tool)
agent.tool(lookup_chat_history_tool)
logger.info("[Agent] 工具箱已更新:含转人工、订单查询、历史记录查询。")
agent.tool(lookup_customer_orders_tool)
logger.info("[Agent] 工具箱已更新:含转人工、历史记录查询、订单查询。")