feat: 新增xbot agent核心代码

新增agent/app/xbot模块,包含:
- agent.py: agent核心逻辑
- config.py: 配置管理
- session.py: 会话管理
- memory.py: 记忆管理
- loop.py: 循环任务
- adapter.py: 适配器

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 15:23:05 +08:00
parent a1866ae490
commit 465fdf2e6c
2 changed files with 140 additions and 13 deletions

View File

@@ -6,9 +6,16 @@ from typing import Any, Optional
from datetime import datetime
from .loop import AgentLoop
from .memory import MemoryConsolidator
from .session import SessionManager
from .adapter import XBotLLMAdapter, LLMResponse
from . import config
# 尝试导入 simplemem
try:
from simplemem import SimpleMemSystem
HAS_SIMPLEMEM = True
except ImportError:
HAS_SIMPLEMEM = False
class SimpleToolRegistry:
@@ -84,6 +91,8 @@ class XBotAgent:
base_url: Optional[str] = None,
workspace: Optional[Path] = None,
context_window_tokens: int = 200000,
embedding_model: Optional[str] = None,
embedding_base_url: Optional[str] = None,
):
"""
初始化 XBot Agent
@@ -101,9 +110,15 @@ class XBotAgent:
self.name = name
self.role_description = role_description
# 创建工作目录
# 使用配置文件的默认值
if api_key is None:
api_key = config.API_KEY
if base_url is None:
base_url = config.BASE_URL
if workspace is None:
workspace = Path(os.getenv("XAGENT_WORKSPACE", "./xbot_workspace"))
workspace = Path(config.WORKSPACE)
# 创建工作目录
self.workspace = workspace
self.workspace.mkdir(parents=True, exist_ok=True)
@@ -130,14 +145,35 @@ class XBotAgent:
# 创建会话管理器
self.sessions = SessionManager(self.workspace)
# 创建内存压缩器
self.memory = MemoryConsolidator(
workspace=self.workspace,
provider=self.provider,
# 创建 SimpleMem 记忆系统
if HAS_SIMPLEMEM and api_key and config.ENABLE_SIMPLEMEM:
# 使用配置文件的 embedding 设置
emb_model = embedding_model or config.EMBEDDING_MODEL
emb_base = embedding_base_url or config.EMBEDDING_BASE_URL or base_url
self.memory = SimpleMemSystem(
api_key=api_key,
base_url=emb_base,
model=model,
sessions=self.sessions,
context_window_tokens=context_window_tokens,
embedding_model=emb_model,
db_path=str(self.workspace / "memory_db"),
clear_db=False,
# 并行处理配置
enable_parallel_processing=config.ENABLE_PARALLEL_PROCESSING,
max_parallel_workers=config.MAX_PARALLEL_WORKERS,
enable_parallel_retrieval=config.ENABLE_PARALLEL_RETRIEVAL,
max_retrieval_workers=config.MAX_RETRIEVAL_WORKERS,
enable_planning=config.ENABLE_PLANNING,
enable_reflection=config.ENABLE_REFLECTION,
max_reflection_rounds=config.MAX_REFLECTION_ROUNDS,
)
self._use_simplemem = True
print(f"SimpleMem initialized with embedding: {emb_model}, base_url: {emb_base}")
else:
self.memory = None
self._use_simplemem = False
if not api_key:
print("Warning: No API key provided, SimpleMem will be disabled")
def _register_default_tools(self) -> None:
"""注册默认工具"""
@@ -191,6 +227,17 @@ class XBotAgent:
请根据用户的问题回答,并使用 Markdown 格式输出。"""
# 如果使用 SimpleMem检索相关记忆
memory_context = ""
if self._use_simplemem and self.memory:
try:
memory_context = self.memory.ask(user_input)
except Exception as e:
print(f"Memory retrieval error: {e}")
if memory_context:
system_prompt += f"\n\n相关记忆:\n{memory_context}"
# 获取历史消息
history = session.get_history(max_messages=50)
@@ -210,8 +257,14 @@ class XBotAgent:
session.messages.append(m)
self.sessions.save(session)
# 尝试内存压缩
await self.memory.maybe_consolidate_by_tokens(session)
# 保存到 SimpleMem 记忆
if self._use_simplemem and self.memory and final_content:
try:
self.memory.add_dialogue("User", user_input, datetime.now().isoformat())
self.memory.add_dialogue(self.name, final_content, datetime.now().isoformat())
self.memory.finalize()
except Exception as e:
print(f"Memory save error: {e}")
return {
"content": final_content or "No response",

74
agent/app/xbot/config.py Normal file
View File

@@ -0,0 +1,74 @@
"""
XBot 配置文件
"""
# ==================== LLM 配置 ====================
# 默认 LLM 提供商
DEFAULT_PROVIDER = "openai"
# 默认模型
DEFAULT_MODEL = "gpt-4"
# API Key建议使用环境变量
import os
API_KEY = os.getenv("OPENAI_API_KEY", "")
# Base URL
BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
# ==================== SimpleMem 记忆配置 ====================
# 是否启用 SimpleMem
ENABLE_SIMPLEMEM = True
# Embedding 模型
# 推荐: text-embedding-3-small, text-embedding-3-large, text-embedding-ada-002
# 或使用 Qwen: Qwen/Qwen3-Embedding-0.6B
EMBEDDING_MODEL = os.getenv("EMBEDDING_MODEL", "text-embedding-3-small")
# Embedding 服务的 Base URL可选默认使用 BASE_URL
EMBEDDING_BASE_URL = os.getenv("EMBEDDING_BASE_URL", "")
# ==================== 并行处理配置 ====================
# 是否启用并行处理
ENABLE_PARALLEL_PROCESSING = True
MAX_PARALLEL_WORKERS = 8
# 是否启用并行检索
ENABLE_PARALLEL_RETRIEVAL = True
MAX_RETRIEVAL_WORKERS = 4
# 是否启用规划
ENABLE_PLANNING = True
# 是否启用反思
ENABLE_REFLECTION = True
MAX_REFLECTION_ROUNDS = 2
# ==================== 工作目录 ====================
# 工作目录(用于存储会话和记忆)
WORKSPACE = os.getenv("XAGENT_WORKSPACE", "./xbot_workspace")
# 上下文窗口大小
CONTEXT_WINDOW_TOKENS = 200000
# ==================== Agent 配置 ====================
# 默认 Agent 配置
DEFAULT_AGENTS = {
1: {
"name": "数据分析助手",
"role_description": "你是一个专业的数据分析助手,擅长分析数据、生成报告。",
},
2: {
"name": "代码审查助手",
"role_description": "你是一个专业的代码审查助手擅长审查代码、发现bug。",
},
}