feat: 添加 AI Agent 对话测试工具 + 代码优化
主要变更: - 新增 tests/test_ai_chat.py: AI Agent 对话测试工具 - 优化 core/pydantic_ai_agent.py 和 db/chat_log_db.py - 清理归档文件,更新文档 Made-with: Cursor
This commit is contained in:
@@ -177,17 +177,8 @@ def cmd_live(refresh: int = 3):
|
||||
|
||||
try:
|
||||
while True:
|
||||
import sqlite3
|
||||
conn = sqlite3.connect(db._DB_PATH)
|
||||
conn.row_factory = sqlite3.Row
|
||||
rows = conn.execute("""
|
||||
SELECT id, customer_id, customer_name, direction, message, timestamp
|
||||
FROM chat_logs
|
||||
ORDER BY id DESC LIMIT 20
|
||||
""").fetchall()
|
||||
conn.close()
|
||||
|
||||
new_rows = [dict(r) for r in rows if r["id"] not in seen_ids]
|
||||
rows = db.get_latest_messages(20)
|
||||
new_rows = [r for r in rows if r["id"] not in seen_ids]
|
||||
if new_rows:
|
||||
new_rows.reverse()
|
||||
for r in new_rows:
|
||||
|
||||
@@ -24,22 +24,23 @@ logger = logging.getLogger(__name__)
|
||||
class WorkerProcess:
|
||||
"""工作进程"""
|
||||
|
||||
def __init__(self, worker_id: int, shard_keys: List[str]):
|
||||
def __init__(self, worker_id: int, shard_keys: List[str], enable_agent: bool = True):
|
||||
self.worker_id = worker_id
|
||||
self.shard_keys = shard_keys
|
||||
self.enable_agent = enable_agent
|
||||
self.process = None
|
||||
|
||||
def start(self):
|
||||
"""启动工作进程"""
|
||||
self.process = Process(
|
||||
target=self._run,
|
||||
args=(self.worker_id, self.shard_keys),
|
||||
args=(self.worker_id, self.shard_keys, self.enable_agent),
|
||||
name=f"ai-cs-worker-{self.worker_id}"
|
||||
)
|
||||
self.process.start()
|
||||
logger.info(f"Worker {self.worker_id} 启动 (PID: {self.process.pid})")
|
||||
|
||||
def _run(self, worker_id: int, shard_keys: List[str]):
|
||||
def _run(self, worker_id: int, shard_keys: List[str], enable_agent: bool):
|
||||
"""工作进程入口"""
|
||||
try:
|
||||
# 设置进程环境变量
|
||||
@@ -50,7 +51,7 @@ class WorkerProcess:
|
||||
from core.websocket_client import QingjianAPIClient
|
||||
|
||||
logger.info(f"Worker {worker_id} 初始化 Agent...")
|
||||
client = QingjianAPIClient(enable_agent=True)
|
||||
client = QingjianAPIClient(enable_agent=enable_agent)
|
||||
|
||||
# 只处理分配给这个 worker 的客户
|
||||
client.shard_keys = set(shard_keys)
|
||||
@@ -77,10 +78,11 @@ class WorkerProcess:
|
||||
class Coordinator:
|
||||
"""协调器 - 管理多个工作进程"""
|
||||
|
||||
def __init__(self, num_workers: int = None):
|
||||
def __init__(self, num_workers: int = None, enable_agent: bool = True):
|
||||
self.num_workers = num_workers or max(2, cpu_count())
|
||||
self.workers: List[WorkerProcess] = []
|
||||
self.running = False
|
||||
self.enable_agent = enable_agent
|
||||
|
||||
def _get_shard_key(self, acc_id: str, from_id: str) -> int:
|
||||
"""根据店铺 ID + 客户 ID 计算分片 key"""
|
||||
@@ -117,7 +119,8 @@ class Coordinator:
|
||||
for worker_id in range(self.num_workers):
|
||||
worker = WorkerProcess(
|
||||
worker_id=worker_id,
|
||||
shard_keys=shards.get(worker_id, [])
|
||||
shard_keys=shards.get(worker_id, []),
|
||||
enable_agent=self.enable_agent
|
||||
)
|
||||
worker.start()
|
||||
self.workers.append(worker)
|
||||
|
||||
Reference in New Issue
Block a user