# Agent **Repository Path**: protect-xiaozhou/agent ## Basic Information - **Project Name**: Agent - **Description**: 学习 Agent 智能体开发 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-28 - **Last Updated**: 2026-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # agent 一个基于 LangChain 的多模型技能路由示例工程。 当前项目重点解决两个问题: 1. 将大模型接入从业务代码中解耦,支持按配置切换不同模型。 2. 将 Skill 的提示词能力做成可扩展的路由结构,方便后续继续增加技能。 ## 功能概览 当前已支持: 1. 通义千问 `Tongyi` 2. OpenAI 兼容模型 3. DeepSeek 4. 基于关键字的 Skill 路由 5. 使用 `.env` 管理模型配置 ## 目录结构 ```text agent/ ├─ .env.example ├─ README.md ├─ 01_LLM应用.ipynb └─ skill/ ├─ MySkill.py └─ llm/ ├─ __init__.py ├─ base.py ├─ config.py ├─ factory.py ├─ skill.py ├─ skill_router.py ├─ tongyi_strategy.py ├─ openai_strategy.py ├─ deepseek_strategy.py └─ openai_compatible_strategy.py ``` ## 核心设计 ### 1. 模型策略层 `skill/llm/base.py` 中定义了统一模型枚举和策略抽象: ```python class ModelName(str, Enum): TONGYI_QWEN_PLUS = "tongyi_qwen_plus" OPENAI_GPT_4O_MINI = "openai_gpt_4o_mini" DEEPSEEK_CHAT = "deepseek_chat" ``` ```python class LLMStrategy(ABC): @abstractmethod def invoke(self, prompt): pass ``` `skill/llm/factory.py` 负责根据 `ModelName` 创建具体模型实例。 这样业务层只依赖: 1. `ModelName` 2. `LLMFactory` 不直接依赖具体模型 SDK。 ### 2. 配置集中管理 `skill/llm/config.py` 统一负责: 1. 读取 `.env` 2. 获取默认模型 3. 获取 Tongyi / OpenAI / DeepSeek 的配置 ### 3. Skill 路由层 `skill/llm/skill.py` 定义技能结构。 `skill/llm/skill_router.py` 负责: 1. 注册技能列表 2. 根据关键字匹配技能 3. 返回匹配原因 4. 生成技能描述摘要 `skill/MySkill.py` 只负责: 1. 创建模型 2. 调用路由器选择技能 3. 组装 Prompt 4. 发起模型调用 ## 环境配置 先参考 `.env.example` 创建 `.env`。 示例: ```env DEFAULT_MODEL_NAME=tongyi_qwen_plus TONGYI_API_KEY=your_tongyi_key TONGYI_MODEL=qwen-plus OPENAI_API_KEY=your_openai_key OPENAI_MODEL=gpt-4o-mini OPENAI_BASE_URL=https://api.openai.com/v1 DEEPSEEK_API_KEY=your_deepseek_key DEEPSEEK_MODEL=deepseek-chat DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 ``` ## 安装依赖 项目当前至少需要: ```bash pip install langchain langchain-community python-dotenv dashscope ``` 说明: 1. Tongyi 依赖 `langchain-community` 2. `.env` 读取依赖 `python-dotenv` 3. OpenAI 和 DeepSeek 当前通过兼容 HTTP 接口调用,不依赖 `openai` SDK ## 使用方式 ### 1. 使用默认模型 默认模型由 `.env` 中的 `DEFAULT_MODEL_NAME` 决定。 ```python from skill.MySkill import MySkill skill = MySkill() result = skill.execute("帮我写一个 Python 二分查找") print(result) ``` ### 2. 显式指定模型 ```python from skill.MySkill import MySkill from skill.llm import ModelName skill = MySkill(ModelName.TONGYI_QWEN_PLUS) print(skill.execute("帮我写一个 Python 二分查找")) skill = MySkill(ModelName.OPENAI_GPT_4O_MINI) print(skill.execute("帮我优化一条 SQL 查询")) skill = MySkill(ModelName.DEEPSEEK_CHAT) print(skill.execute("写一个 SQL join 示例")) ``` ### 3. Notebook 示例 `01_LLM应用.ipynb` 中演示了: 1. 通过环境变量读取 `TONGYI_API_KEY` 2. 使用 `PromptTemplate` 3. 调用 Tongyi 模型 ## 当前内置技能 `MySkill.py` 当前内置两个技能: 1. `python_expert` 2. `sql_expert` 每个技能包含: 1. `name` 2. `description` 3. `keywords` 4. `content` 示例结构: ```python PYTHON_SKILL = { "name": "python_expert", "description": "Python 编程、算法、工程化", "keywords": ["python", "函数", "类", "算法"], "content": """ 你是资深 Python 工程师: 1. 输出完整可运行代码,带注释 2. 优先使用标准库,必要时用主流库 3. 提供测试用例与错误处理 """ } ``` ## 如何新增一个 Skill 新增技能时,通常只需要两步: 1. 新增一个技能字典 2. 将它加入 `ALL_SKILLS` 示例: ```python JAVA_SKILL = { "name": "java_expert", "description": "Java 编程、Spring、并发", "keywords": ["java", "spring", "jvm", "线程", "并发"], "content": """ 你是资深 Java 工程师: 1. 输出完整可运行代码 2. 解释设计思路 3. 注意异常处理和工程实践 """ } ALL_SKILLS = [PYTHON_SKILL, SQL_SKILL, JAVA_SKILL] ``` ## 如何新增一个模型 新增模型时,通常只需要: 1. 在 `ModelName` 中增加枚举值 2. 新增一个策略类 3. 在 `LLMFactory.create()` 中注册 4. 在 `config.py` 中增加对应配置读取 ## 运行说明 直接运行: ```bash python skill/MySkill.py ``` 如果在 Windows 终端输出中文或特殊字符出现编码问题,当前脚本入口已做 `utf-8` 输出处理。 ## 后续可扩展方向 1. 将每个 Skill 独立拆到单独文件 2. 支持自动扫描并注册插件技能 3. 支持让模型先做 Skill 分类,再路由到具体技能 4. 增加更多模型接入,例如 Claude 5. 为 `SkillRouter` 增加更细粒度匹配策略