newtw3
This commit is contained in:
@@ -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] 工具箱已更新:含转人工、历史记录查询、订单查询。")
|
||||
|
||||
Reference in New Issue
Block a user