久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

從零搭建智能體開發(fā)工具鏈:開源組件構(gòu)建可控AI工程化方案

從零搭建智能體開發(fā)工具鏈:開源組件構(gòu)建可控AI工程化方案 最近在嘗試將AI能力集成到業(yè)務(wù)系統(tǒng)中時發(fā)現(xiàn)市面上的智能體平臺雖然功能強大但要么是黑盒要么定制成本極高要么就是難以與現(xiàn)有開發(fā)流程和工具鏈深度集成。對于希望將智能體能力“工程化”落地的團隊來說從零理解其核心并搭建一套可控、可擴展、可集成的開發(fā)工具鏈?zhǔn)潜亟?jīng)之路。本文將從零開始手把手帶你搭建一套專屬于你自己的智能體Agent開發(fā)工具鏈。我們將不依賴任何大型商業(yè)平臺而是基于開源組件和標(biāo)準(zhǔn)協(xié)議構(gòu)建一個從環(huán)境配置、核心框架、工具集成到工程化部署的完整閉環(huán)。無論你是想深入理解Agent的內(nèi)部機制還是希望為團隊打造一套標(biāo)準(zhǔn)化的AI開發(fā)基礎(chǔ)設(shè)施這篇文章都將提供一套可直接復(fù)用的實戰(zhàn)方案。1. 智能體Agent開發(fā)的核心概念與工程化挑戰(zhàn)在開始動手之前我們必須明確幾個核心概念并理解為什么需要一套工具鏈而不是簡單地調(diào)用一個API。1.1 什么是智能體Agent在AI語境下一個智能體Agent通常指一個能夠感知環(huán)境、進行決策并執(zhí)行行動以實現(xiàn)特定目標(biāo)的軟件實體。與傳統(tǒng)的“聊天機器人”或“問答系統(tǒng)”不同一個真正的Agent具備幾個關(guān)鍵特征自主性Autonomy能在沒有人類直接干預(yù)的情況下運行。反應(yīng)性Reactivity能感知環(huán)境如用戶輸入、API返回、數(shù)據(jù)庫變化并做出及時響應(yīng)。主動性Pro-activeness不僅被動響應(yīng)還能主動發(fā)起目標(biāo)導(dǎo)向的行為。社交能力Social Ability能與其他Agent或人類進行交互和協(xié)作。當(dāng)前基于大語言模型LLM的Agent是其最流行的實現(xiàn)形式。LLM作為其“大腦”負責(zé)理解、規(guī)劃和決策而外部的“工具”Tools則成為其“手腳”用于執(zhí)行具體的操作如查詢數(shù)據(jù)庫、調(diào)用API、運行代碼等。1.2 為什么需要“工具鏈”而非“單點方案”很多開發(fā)者初涉Agent開發(fā)時會從一個簡單的腳本開始接收用戶輸入調(diào)用LLM API解析返回結(jié)果然后執(zhí)行某個操作。但隨著需求復(fù)雜化這種模式會迅速陷入困境工具管理混亂工具函數(shù)散落在各處缺乏統(tǒng)一的注冊、描述和調(diào)用機制。狀態(tài)管理困難Agent與用戶的多次對話多輪對話狀態(tài)如何保存和恢復(fù)流程編排缺失復(fù)雜的任務(wù)需要多個Agent協(xié)作或按特定工作流執(zhí)行代碼會變得極其臃腫??捎^測性差A(yù)gent內(nèi)部如何思考、為什么選擇某個工具、執(zhí)行結(jié)果如何這些過程如同黑盒難以調(diào)試和優(yōu)化。工程化部署難如何將開發(fā)好的Agent打包、部署、監(jiān)控、擴縮容并與現(xiàn)有CI/CD流程集成因此一套完整的Agent開發(fā)工具鏈旨在系統(tǒng)性地解決上述問題將Agent開發(fā)從“腳本編寫”升級為“軟件工程”。1.3 工具鏈的核心組件我們計劃構(gòu)建的工具鏈將包含以下核心層這也是本文的實踐路線圖環(huán)境與基礎(chǔ)層Python環(huán)境、虛擬環(huán)境管理、依賴管理。核心框架層選擇或自建一個輕量級Agent核心框架負責(zé)大腦LLM的調(diào)用、工具的管理與調(diào)度、記憶對話歷史的維護。工具集成層標(biāo)準(zhǔn)化工具的封裝、注冊與調(diào)用接口。編排與工作流層實現(xiàn)多個Agent的協(xié)作和復(fù)雜任務(wù)的流程控制。工程化與部署層日志、監(jiān)控、配置管理、容器化部署。2. 環(huán)境準(zhǔn)備與項目初始化我們選擇Python作為主要開發(fā)語言因其在AI生態(tài)中擁有最豐富的庫支持。2.1 基礎(chǔ)環(huán)境配置首先確保你的系統(tǒng)已安裝Python推薦3.9或以上版本和pip。然后為項目創(chuàng)建一個獨立的虛擬環(huán)境這是管理依賴的最佳實踐。# 創(chuàng)建項目目錄 mkdir my_agent_toolchain cd my_agent_toolchain # 創(chuàng)建Python虛擬環(huán)境使用venv python -m venv venv # 激活虛擬環(huán)境 # 在Windows上 venv\Scripts\activate # 在Linux/Mac上 source venv/bin/activate激活后你的命令行提示符前會出現(xiàn)(venv)標(biāo)識。2.2 初始化項目結(jié)構(gòu)與依賴管理我們使用pyproject.toml現(xiàn)代Python項目標(biāo)準(zhǔn)來管理依賴和項目元數(shù)據(jù)。# 創(chuàng)建基礎(chǔ)項目結(jié)構(gòu) mkdir -p src/my_agent tools configs tests touch src/my_agent/__init__.py touch pyproject.toml README.md .gitignore編輯pyproject.toml文件定義項目依賴。我們將從最核心的依賴開始。# pyproject.toml [project] name my-agent-toolchain version 0.1.0 description A custom agent development toolchain from scratch. authors [{name Your Name, email your.emailexample.com}] readme README.md requires-python 3.9 dependencies [ openai1.0.0, # 用于調(diào)用OpenAI API或其他兼容API langchain-core0.1.0, # 使用LangChain的核心抽象但不一定用其全量框架 pydantic2.0.0, # 用于數(shù)據(jù)驗證和設(shè)置管理 httpx0.25.0, # 異步HTTP客戶端用于工具調(diào)用 python-dotenv1.0.0, # 從.env文件加載環(huán)境變量 ] [project.optional-dependencies] dev [ pytest7.0.0, black23.0.0, isort5.12.0, ] web [ fastapi0.104.0, uvicorn[standard]0.24.0, ] [build-system] requires [setuptools61.0, wheel] build-back setuptools.build_meta然后安裝基礎(chǔ)依賴pip install -e . # 以可編輯模式安裝當(dāng)前項目創(chuàng)建.env文件來存儲敏感信息如API密鑰切記不要將其提交到版本控制系統(tǒng)。# .env OPENAI_API_KEYsk-your-openai-api-key-here OPENAI_BASE_URLhttps://api.openai.com/v1 # 如果使用其他兼容服務(wù)可修改此處編輯.gitignore文件忽略虛擬環(huán)境、緩存文件和.env。# .gitignore venv/ __pycache__/ *.py[cod] .env .pytest_cache/ .coverage3. 構(gòu)建核心Agent框架我們不直接使用龐大的全功能框架而是基于清晰的概念自建核心這有助于深刻理解Agent的運行機制。3.1 定義核心抽象Agent、Tool、Memory在src/my_agent/core目錄下創(chuàng)建基礎(chǔ)抽象類。# src/my_agent/core/agent.py from abc import ABC, abstractmethod from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field class Tool(BaseModel): 工具基類每個工具都必須繼承此類。 name: str Field(description工具的唯一名稱) description: str Field(description工具功能的自然語言描述用于讓LLM理解何時使用此工具) args_schema: Optional[type[BaseModel]] Field(defaultNone, description工具參數(shù)的Pydantic模型) abstractmethod async def run(self, **kwargs) - str: 執(zhí)行工具的核心方法。 pass class Memory(BaseModel): 記憶基類負責(zé)存儲和檢索對話歷史。 messages: List[Dict[str, Any]] Field(default_factorylist) def add_message(self, role: str, content: str): 添加一條消息到歷史記錄。 self.messages.append({role: role, content: content}) def get_context(self, max_tokens: int 2000) - List[Dict[str, Any]]: 獲取最近的對話上下文用于發(fā)送給LLM。 # 簡單的實現(xiàn)返回全部消息生產(chǎn)環(huán)境需實現(xiàn)Token計數(shù)和截斷 return self.messages[-10:] # 示例返回最近10條 class BaseAgent(ABC): Agent基類。 def __init__(self, llm_client, memory: Optional[Memory] None): self.llm llm_client self.memory memory or Memory() self.tools: Dict[str, Tool] {} def register_tool(self, tool: Tool): 向Agent注冊一個工具。 self.tools[tool.name] tool abstractmethod async def think(self, user_input: str) - str: 核心思考循環(huán)處理用戶輸入可能調(diào)用工具并生成最終回復(fù)。 pass3.2 實現(xiàn)一個簡單的ReAct模式AgentReActReasoning Acting是一種經(jīng)典的Agent推理模式。我們實現(xiàn)一個簡化版本。# src/my_agent/core/react_agent.py import json import re from typing import Dict, Any from .agent import BaseAgent, Tool, Memory from pydantic import BaseModel class ReasoningStep(BaseModel): thought: str action: Optional[str] None # 工具名 action_input: Optional[Dict[str, Any]] None observation: Optional[str] None final_answer: Optional[str] None class ReActAgent(BaseAgent): 一個實現(xiàn)ReAct推理模式的簡單Agent。 async def think(self, user_input: str) - str: # 將用戶輸入加入記憶 self.memory.add_message(user, user_input) # 構(gòu)建系統(tǒng)提示包含工具描述 tools_description \n.join([f- {name}: {tool.description} for name, tool in self.tools.items()]) system_prompt f你是一個有幫助的AI助手可以調(diào)用工具來解決問題。 你可以使用的工具如下 {tools_description} 請遵循以下格式進行思考 Thought: 你需要思考當(dāng)前情況決定是否需要使用工具以及使用哪個工具。 Action: 需要調(diào)用的工具名稱如果沒有工具可用或不需要就填 None。 Action Input: 調(diào)用工具所需的輸入?yún)?shù)必須是JSON格式。如果Action是None這里也填 null。 Observation: 工具執(zhí)行后的結(jié)果。 ... (這個 Thought/Action/Action Input/Observation 循環(huán)可以重復(fù)多次) Thought: 我現(xiàn)在有足夠的信息來回答用戶了。 Final Answer: 給用戶的最終回答。 # 獲取對話上下文 context_messages self.memory.get_context() # 準(zhǔn)備發(fā)送給LLM的消息 messages [ {role: system, content: system_prompt}, *context_messages, {role: user, content: user_input}, ] max_iterations 5 for i in range(max_iterations): # 調(diào)用LLM獲取下一步推理 llm_response await self.llm.chat.completions.create( modelgpt-3.5-turbo, # 或 gpt-4 messagesmessages, temperature0, ) response_text llm_response.choices[0].message.content # 解析LLM的響應(yīng)提取 Thought, Action 等部分這里簡化實際應(yīng)用需要更魯棒的解析 # 假設(shè)LLM嚴(yán)格按照格式回復(fù) thought_match re.search(rThought:\s*(.), response_text, re.DOTALL) action_match re.search(rAction:\s*(.), response_text) action_input_match re.search(rAction Input:\s*(.), response_text, re.DOTALL) thought thought_match.group(1).strip() if thought_match else action action_match.group(1).strip() if action_match else None action_input_str action_input_match.group(1).strip() if action_input_match else null print(f[Agent Iteration {i1}] Thought: {thought}) print(f[Agent Iteration {i1}] Action: {action}) if action and action ! None: # 執(zhí)行工具調(diào)用 try: action_input json.loads(action_input_str) if action_input_str ! null else {} tool self.tools.get(action) if tool: observation await tool.run(**action_input) print(f[Agent Iteration {i1}] Observation: {observation}) # 將本次行動和觀察加入消息歷史供下一輪參考 messages.append({role: assistant, content: fAction: {action}\nAction Input: {action_input_str}}) messages.append({role: user, content: fObservation: {observation}}) else: observation fError: Tool {action} not found. messages.append({role: user, content: fObservation: {observation}}) except json.JSONDecodeError: observation fError: Invalid JSON in Action Input: {action_input_str} messages.append({role: user, content: fObservation: {observation}}) except Exception as e: observation fError executing tool {action}: {str(e)} messages.append({role: user, content: fObservation: {observation}}) else: # 沒有更多行動嘗試提取最終答案 final_answer_match re.search(rFinal Answer:\s*(.), response_text, re.DOTALL) if final_answer_match: final_answer final_answer_match.group(1).strip() self.memory.add_message(assistant, final_answer) return final_answer else: # 如果沒有明確Final Answer可能LLM格式有誤直接返回其回復(fù) self.memory.add_message(assistant, response_text) return response_text return 抱歉經(jīng)過多輪推理仍未得到最終答案。3.3 集成LLM客戶端我們使用OpenAI官方Python SDK并對其進行簡單封裝以適配我們的Agent接口。# src/my_agent/llm/openai_client.py import os from openai import AsyncOpenAI from dotenv import load_dotenv load_dotenv() # 加載.env文件中的環(huán)境變量 class OpenAIClient: def __init__(self): api_key os.getenv(OPENAI_API_KEY) base_url os.getenv(OPENAI_BASE_URL, https://api.openai.com/v1) if not api_key: raise ValueError(OPENAI_API_KEY environment variable is not set.) self.client AsyncOpenAI(api_keyapi_key, base_urlbase_url) property def chat(self): # 提供一個與我們的Agent期望的接口兼容的屬性 return self.client.chat4. 開發(fā)與集成自定義工具Tools工具是Agent能力的延伸。我們來創(chuàng)建幾個常用工具。4.1 天氣查詢工具# src/my_agent/tools/weather_tool.py import httpx from pydantic import BaseModel, Field from ..core.agent import Tool from dotenv import load_dotenv import os load_dotenv() class WeatherInput(BaseModel): city: str Field(description城市名稱例如北京、Shanghai) class WeatherTool(Tool): def __init__(self): super().__init__( nameget_weather, description根據(jù)城市名稱查詢當(dāng)前天氣情況。, args_schemaWeatherInput ) self.api_key os.getenv(WEATHER_API_KEY) # 假設(shè)你有一個天氣API的Key # 這里使用一個模擬的免費API示例實際使用時請?zhí)鎿Q為真實API self.base_url http://wttr.in/ async def run(self, city: str) - str: 調(diào)用天氣API。 try: async with httpx.AsyncClient() as client: # 注意wttr.in 是一個免費服務(wù)格式可能變化僅作示例 url f{self.base_url}{city}?format3 # 格式3返回簡短文本 response await client.get(url, timeout10.0) response.raise_for_status() weather_info response.text.strip() return f{city}的天氣是{weather_info} except httpx.RequestError as e: return f請求天氣API時出錯{str(e)} except Exception as e: return f處理天氣信息時發(fā)生未知錯誤{str(e)}4.2 計算器工具# src/my_agent/tools/calculator_tool.py from pydantic import BaseModel, Field from ..core.agent import Tool import ast import operator as op class CalculatorInput(BaseModel): expression: str Field(description一個有效的數(shù)學(xué)表達式例如(3 5) * 2) class CalculatorTool(Tool): def __init__(self): super().__init__( namecalculator, description計算一個數(shù)學(xué)表達式的結(jié)果。支持加減乘除和括號。, args_schemaCalculatorInput ) # 定義安全的運算符 self._allowed_operators { ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul, ast.Div: op.truediv, ast.Pow: op.pow, ast.USub: op.neg, } async def run(self, expression: str) - str: 安全地計算數(shù)學(xué)表達式。 try: # 使用ast.literal_eval進行安全評估 # 注意這里我們實現(xiàn)一個更安全的自定義評估器避免直接使用eval result self._safe_eval(expression) return f表達式 {expression} 的計算結(jié)果是{result} except (SyntaxError, ValueError, TypeError, ZeroDivisionError) as e: return f計算表達式 {expression} 時出錯{str(e)}。請確保表達式格式正確。 def _safe_eval(self, node): 遞歸安全地評估AST節(jié)點。 if isinstance(node, ast.Num): # number return node.n elif isinstance(node, ast.BinOp): # left operator right left_val self._safe_eval(node.left) right_val self._safe_eval(node.right) op_func self._allowed_operators.get(type(node.op)) if op_func is None: raise TypeError(f不允許的操作符{type(node.op)}) return op_func(left_val, right_val) elif isinstance(node, ast.UnaryOp): # operator operand e.g., -1 operand_val self._safe_eval(node.operand) op_func self._allowed_operators.get(type(node.op)) if op_func is None: raise TypeError(f不允許的一元操作符{type(node.op)}) return op_func(operand_val) elif isinstance(node, ast.Constant): # Python 3.8 常量 return node.value else: raise TypeError(f不支持的AST節(jié)點類型{type(node)}) def _safe_eval(self, expr: str): 入口函數(shù)將字符串表達式解析為AST并安全評估。 tree ast.parse(expr, modeeval) return self._safe_eval(tree.body) # 注意這里遞歸調(diào)用的是上面的方法需要重命名避免歧義。實際代碼中應(yīng)調(diào)整。修正上面的遞歸問題將內(nèi)部方法重命名def _eval_node(self, node): if isinstance(node, ast.Num): return node.n elif isinstance(node, ast.Constant): return node.value elif isinstance(node, ast.BinOp): left_val self._eval_node(node.left) right_val self._eval_node(node.right) op_func self._allowed_operators.get(type(node.op)) if op_func is None: raise TypeError(f不允許的操作符{type(node.op)}) return op_func(left_val, right_val) elif isinstance(node, ast.UnaryOp): operand_val self._eval_node(node.operand) op_func self._allowed_operators.get(type(node.op)) if op_func is None: raise TypeError(f不允許的一元操作符{type(node.op)}) return op_func(operand_val) else: raise TypeError(f不支持的AST節(jié)點類型{type(node)}) async def run(self, expression: str) - str: try: tree ast.parse(expression, modeeval) result self._eval_node(tree.body) return f表達式 {expression} 的計算結(jié)果是{result} except (SyntaxError, ValueError, TypeError, ZeroDivisionError, AttributeError) as e: return f計算表達式 {expression} 時出錯{str(e)}。請確保表達式格式正確且僅包含基本算術(shù)運算。5. 組裝并運行你的第一個Agent現(xiàn)在讓我們將各個部分組裝起來創(chuàng)建一個可以對話的Agent。5.1 創(chuàng)建主運行腳本# run_agent.py import asyncio import sys from src.my_agent.llm.openai_client import OpenAIClient from src.my_agent.core.react_agent import ReActAgent from src.my_agent.tools.weather_tool import WeatherTool from src.my_agent.tools.calculator_tool import CalculatorTool async def main(): # 1. 初始化LLM客戶端 llm_client OpenAIClient() # 2. 創(chuàng)建Agent實例 agent ReActAgent(llm_clientllm_client) # 3. 注冊工具 agent.register_tool(WeatherTool()) agent.register_tool(CalculatorTool()) print(智能體已啟動輸入 quit 或 exit 退出。) print(- * 40) while True: try: user_input input(\nYou: ).strip() if user_input.lower() in [quit, exit]: print(再見) break if not user_input: continue # 4. 讓Agent思考并回復(fù) response await agent.think(user_input) print(f\nAgent: {response}) except KeyboardInterrupt: print(\n\n程序被中斷。) break except Exception as e: print(f\n發(fā)生錯誤{e}) if __name__ __main__: asyncio.run(main())5.2 運行與測試在項目根目錄下運行python run_agent.py你應(yīng)該會看到提示符。嘗試輸入“北京今天天氣怎么樣”Agent會調(diào)用天氣工具“計算一下 (12 34) * 2 等于多少”Agent會調(diào)用計算器工具“你是誰”Agent會直接利用LLM知識回答觀察控制臺輸出的Thought、Action、Observation日志理解ReAct模式的運行過程。6. 工程化進階構(gòu)建工具鏈的其他關(guān)鍵環(huán)節(jié)一個基礎(chǔ)的Agent跑起來了但要將其工程化我們還需要完善以下環(huán)節(jié)。6.1 工具的動態(tài)加載與發(fā)現(xiàn)手動注冊工具在工具數(shù)量多時會很麻煩。我們可以實現(xiàn)一個工具發(fā)現(xiàn)機制。# src/my_agent/core/tool_registry.py import importlib import pkgutil from pathlib import Path from typing import Dict, Type from .agent import Tool class ToolRegistry: _tools: Dict[str, Type[Tool]] {} classmethod def register(cls, tool_class: Type[Tool]): 類裝飾器用于注冊工具類。 instance tool_class() cls._tools[instance.name] tool_class return tool_class classmethod def discover_tools(cls, package_path: str): 自動發(fā)現(xiàn)指定包路徑下所有繼承了Tool的類并注冊。 package importlib.import_module(package_path) for _, module_name, is_pkg in pkgutil.iter_modules(package.__path__, package.__name__ .): if not is_pkg: module importlib.import_module(module_name) for attr_name in dir(module): attr getattr(module, attr_name) if (isinstance(attr, type) and issubclass(attr, Tool) and attr ! Tool): # 排除基類本身 cls.register(attr) classmethod def get_tool_instance(cls, tool_name: str) - Tool: 根據(jù)工具名獲取工具實例。 tool_class cls._tools.get(tool_name) if tool_class: return tool_class() raise KeyError(fTool {tool_name} not found in registry.) classmethod def get_all_tool_descriptions(cls) - Dict[str, str]: 獲取所有已注冊工具的描述。 return {name: cls.get_tool_instance(name).description for name in cls._tools.keys()}然后我們可以用裝飾器來聲明工具# src/my_agent/tools/weather_tool.py from src.my_agent.core.tool_registry import ToolRegistry ToolRegistry.register class WeatherTool(Tool): # ... 其余代碼不變 ...在主程序中可以自動加載所有工具# run_agent_auto.py from src.my_agent.core.tool_registry import ToolRegistry # ... 其他導(dǎo)入 ... async def main(): # 自動發(fā)現(xiàn)并注冊 src.my_agent.tools 包下的所有工具 ToolRegistry.discover_tools(src.my_agent.tools) llm_client OpenAIClient() agent ReActAgent(llm_clientllm_client) # 從注冊表獲取所有工具實例并注冊到Agent for tool_name in ToolRegistry._tools.keys(): agent.register_tool(ToolRegistry.get_tool_instance(tool_name)) # ... 其余代碼 ...6.2 記憶Memory的持久化當(dāng)前的Memory類只在內(nèi)存中保存對話。生產(chǎn)環(huán)境需要持久化到數(shù)據(jù)庫如Redis、SQLite或向量數(shù)據(jù)庫用于長上下文摘要。# src/my_agent/core/persistent_memory.py import json from typing import List, Dict, Any from pydantic import BaseModel import sqlite3 from datetime import datetime class PersistentMemory(BaseModel): session_id: str db_path: str agent_memory.db class Config: arbitrary_types_allowed True def __init__(self, session_id: str, **data): super().__init__(session_idsession_id, **data) self._init_db() def _init_db(self): conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( CREATE TABLE IF NOT EXISTS message_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, role TEXT NOT NULL, content TEXT NOT NULL, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ) ) conn.commit() conn.close() def add_message(self, role: str, content: str): conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( INSERT INTO message_history (session_id, role, content) VALUES (?, ?, ?), (self.session_id, role, content) ) conn.commit() conn.close() def get_context(self, max_messages: int 10) - List[Dict[str, Any]]: conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( SELECT role, content FROM message_history WHERE session_id ? ORDER BY timestamp DESC LIMIT ?, (self.session_id, max_messages) ) rows cursor.fetchall() conn.close() # 返回時按時間順序從舊到新 messages [{role: row[0], content: row[1]} for row in reversed(rows)] return messages def clear_session(self): conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute(DELETE FROM message_history WHERE session_id ?, (self.session_id,)) conn.commit() conn.close()6.3 添加API服務(wù)層FastAPI要集成到現(xiàn)有系統(tǒng)需要提供HTTP API。# src/my_agent/api/server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from contextlib import asynccontextmanager from ..core.react_agent import ReActAgent from ..llm.openai_client import OpenAIClient from ..core.tool_registry import ToolRegistry import uuid # 全局Agent實例簡單示例生產(chǎn)環(huán)境需考慮并發(fā)和狀態(tài)隔離 _agent None asynccontextmanager async def lifespan(app: FastAPI): # 啟動時初始化 global _agent ToolRegistry.discover_tools(src.my_agent.tools) llm_client OpenAIClient() _agent ReActAgent(llm_clientllm_client) for tool_name in ToolRegistry._tools.keys(): _agent.register_tool(ToolRegistry.get_tool_instance(tool_name)) print(Agent initialized.) yield # 關(guān)閉時清理 print(Shutting down.) app FastAPI(lifespanlifespan) class ChatRequest(BaseModel): session_id: str None # 為空則創(chuàng)建新會話 message: str class ChatResponse(BaseModel): session_id: str reply: str app.post(/chat, response_modelChatResponse) async def chat_endpoint(request: ChatRequest): if _agent is None: raise HTTPException(status_code503, detailAgent not initialized) # 這里簡化處理實際應(yīng)將Memory與session_id綁定 session_id request.session_id or str(uuid.uuid4()) # TODO: 根據(jù)session_id從數(shù)據(jù)庫加載或創(chuàng)建PersistentMemory reply await _agent.think(request.message) return ChatResponse(session_idsession_id, replyreply) app.get(/health) async def health_check(): return {status: healthy}使用Uvicorn運行pip install fastapi uvicorn[standard] uvicorn src.my_agent.api.server:app --host 0.0.0.0 --port 8000 --reload6.4 配置管理Pydantic Settings使用Pydantic Settings管理所有配置。# src/my_agent/config/settings.py from pydantic_settings import BaseSettings from pydantic import Field class Settings(BaseSettings): openai_api_key: str Field(..., envOPENAI_API_KEY) openai_base_url: str Field(https://api.openai.com/v1, envOPENAI_BASE_URL) weather_api_key: str Field(, envWEATHER_API_KEY) database_url: str Field(sqlite:///./agent.db, envDATABASE_URL) log_level: str Field(INFO, envLOG_LEVEL) class Config: env_file .env extra ignore # 忽略.env中未定義的變量 settings Settings()7. 常見問題與排查思路在搭建和運行過程中你可能會遇到以下問題問題現(xiàn)象可能原因排查步驟與解決方案導(dǎo)入錯誤ModuleNotFoundError1. 虛擬環(huán)境未激活。2. 項目未以可編輯模式安裝。3.PYTHONPATH未包含項目根目錄。1. 確認命令行前有(venv)。2. 在項目根目錄執(zhí)行pip install -e .。3. 在IDE中設(shè)置正確的項目根目錄和解釋器。OpenAI API 調(diào)用失敗1. API Key 未設(shè)置或錯誤。2. 網(wǎng)絡(luò)問題或代理配置。3. 余額不足或速率限制。1. 檢查.env文件中的OPENAI_API_KEY。2. 檢查網(wǎng)絡(luò)連接如需代理在代碼中配置http_client。3. 查看OpenAI控制臺賬單和用量。Agent 不調(diào)用工具直接回答1. 系統(tǒng)提示詞Prompt中工具描述不清晰。2. LLM 溫度temperature設(shè)置過高導(dǎo)致輸出不穩(wěn)定。3. 工具名稱或描述與用戶問題匹配度低。1. 優(yōu)化系統(tǒng)提示詞明確指令格式。2. 將temperature設(shè)為0確保確定性輸出。3. 檢查工具描述是否準(zhǔn)確嘗試用更直接的問題測試。工具調(diào)用參數(shù)解析錯誤1. LLM 生成的Action Input不是合法JSON。2. JSON中的參數(shù)名與工具定義的args_schema不匹配。1. 在Agent代碼中增加更健壯的JSON解析和錯誤處理。2. 在工具描述中明確參數(shù)名稱和類型??梢允褂肞ydantic的schema_json()為LLM提供更精確的格式。多輪對話狀態(tài)丟失1.Memory類未正確集成到Agent中。2. 每次請求創(chuàng)建了新的Agent實例。1. 確保agent.think()方法中正確讀取和更新了self.memory。2. 對于Web服務(wù)需要將會話ID與Memory實例綁定并持久化存儲。性能問題響應(yīng)慢1. 工具調(diào)用是同步的阻塞了主線程。2. LLM API調(diào)用耗時過長。3. 未實現(xiàn)流式輸出。1. 確保所有工具方法都是async并使用await調(diào)用。2. 考慮設(shè)置合理的超時時間或使用更快的模型。3. 對于Web API可以研究SSEServer-Sent Events實現(xiàn)流式響應(yīng)。8. 最佳實踐與工程化建議將Agent投入生產(chǎn)環(huán)境需要遵循以下工程化準(zhǔn)則提示詞工程化將系統(tǒng)提示詞、用戶提示詞模板等抽取到配置文件或數(shù)據(jù)庫中便于管理和A/B測試。對提示詞進行版本控制。使用Jinja2等模板引擎動態(tài)生成提示詞。工具開發(fā)的標(biāo)準(zhǔn)化為所有工具編寫清晰的文檔包括輸入/輸出格式、錯誤碼。工具函數(shù)內(nèi)部必須有完善的錯誤處理和日志記錄。為工具編寫單元測試和集成測試。可觀測性與監(jiān)控在Agent的每個關(guān)鍵步驟接收輸入、調(diào)用LLM、調(diào)用工具、返回輸出記錄結(jié)構(gòu)化日志。記錄每次LLM調(diào)用的輸入Token、輸出Token數(shù)量及成本。使用像Prometheus和Grafana監(jiān)控工具調(diào)用成功率、延遲和Agent整體響應(yīng)時間。安全與權(quán)限工具權(quán)限控制不是所有用戶都能調(diào)用所有工具。實現(xiàn)一個權(quán)限層根據(jù)用戶身份或會話上下文決定可用的工具集。輸入輸出過濾對用戶輸入和工具返回的內(nèi)容進行安全檢查防止Prompt注入、敏感信息泄露。沙箱環(huán)境對于執(zhí)行代碼、訪問文件系統(tǒng)等高危工具必須在安全的沙箱環(huán)境中運行。測試策略單元測試測試每個工具函數(shù)的邏輯。集成測試測試Agent與LLM、工具的集成流程可以使用LLM的Mock來避免真實API調(diào)用。端到端測試模擬真實用戶場景測試完整的對話流。部署與運維容器化使用Docker將Agent及其依賴打包確保環(huán)境一致性。配置分離所有密鑰、端點URL等配置必須通過環(huán)境變量或配置中心管理絕不能硬編碼。健康檢查與就緒探針為Web服務(wù)添加/health端點便于K8s等編排系統(tǒng)管理。版本回滾Agent的代碼、模型版本、提示詞版本都應(yīng)有明確的版本號支持快速回滾。通過以上步驟你不僅搭建了一個可運行的智能體更構(gòu)建了一套支撐其持續(xù)迭代和穩(wěn)定運行的工程化工具鏈雛形。這套工具鏈的核心思想是模塊化、可觀測、可測試、可部署。你可以在此基礎(chǔ)上繼續(xù)擴展工作流引擎、可視化編排界面、更復(fù)雜的記憶模塊如向量數(shù)據(jù)庫逐步將其打造成團隊內(nèi)部強大的AI能力中臺。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
清纯唯美第一页| 久久久久久性爱视频| 粉嫩av一区二区三区天美传媒 | av东京热男人的天堂| 亚洲图片偷拍视频区| 青草地一本线一区二区三区| 蜜臀99999| 亚洲……91| 欧美成人一区二区三区在线播放| 精品国模无码| 97国产|免费| 九九自拍伦理| 强乱老妇中文字幕| 蜜乳av一区二区三区四区不卡| 亚洲综合色婷婷| 精品久久久久久中文字幕三区| 秘书高跟黑色丝袜国产91在线| 人妻出轨一区二区三区| 丁香五月天社区| 操碰91| 国产黄色 A 片免费看| 天美传媒AV在线| 熟妇无码视频三区| 一本一道久久综合久久| 五月天精品| 亚洲欧洲无码一区夜| 秋霞男人网| 国产精品老熟女一区二区| 国产高潮AA片免费看| 欧美日韩一区二区三区四区蜜桃| 日韩操逼性鲍| 日韩簧片免费看| 亚洲风情在线观看| 午夜男人的天堂| 久热这里只有精品9| 大香蕉之青青草原| 另类专区加勒比| 欧洲精品区| 国产精品网站免费| 国产成人天堂| 久久后入制服| 久久久久成人网| 白嫩妹子国产骚| 综合性视频99| 青青操网| 在线观看高清AV| 日韩人妻精品中文字幕| 人乳av| 少妇久久久免费| 国产精品一二三| 超碰97伊人| 东京热AV男人的天堂| 国产97/欧美| 女人18精品一区二区三区| 亚洲色图自拍| 深夜视频| 秋霞怕怕片| 一级性爱视频免费观看| 人妻精品视频一区二区| 老鸭窝亚洲毛片| 五月天伊人| 五月开心久久AV官网| 天天日天天屌天天操| 日日干夜夜欢| 久久嫩草| 色色操| 久操视频免费在线观看| 色偷综合| 乱伦日本中文自拍| 中文字幕亚洲在线一区| 欧美另类自拍| 人妻丝袜一区二区三区在线| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 91综合在线| 欧亚性爱在线视频| 99九九久久| 精彩视频日韩| 久久是精品| 91亚洲综合| 欧美视频在线视频免费va| 日韩AV电影网站| 欧美一级专区免费大片| 试看60秒 爽| 福利在线观看一区二区| 久久成年精品| 国产老太乱伦一区| www…国产操逼| 操学生天天| 久一区久久蜜桃| 日韩不卡av一二三| 欧美一二在线| 亚欧成人一级片在线播放| 亚洲无线码欧洲精品区别| 欧美 亚洲 综合 制服| 伦理弟一页| 欧美一级在线观看成人| 91操碰| 亚洲中文电影| 91精品人妻一区二区三区蜜桃| 色欲三区| 99热精品青草在线| 国产精品对白自产拍| 欧美色www亚洲国产阿娇要播| 91丨九色丨国产打屁股| 久久视频少妇美女| 亚洲人成网站7777| 丁香五月AV| 久久久久久久久久久久久久久久9| 日韩综合97p| 日本性感人妻91| 亚洲一区深夜| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 久久人妻无码毛片A片麻豆| 亚洲色人| 性爱久久| 天天亚洲| 天天综合网一91网| 天天综合中文字幕 91| 操操逼操操逼操操逼逼| 无码久| 成·人免费午夜在线观看| 综合久| 丝袜视频网国产90| 国产精品一区二区 尿失禁| 亚洲91av| 大JI巴好深好爽又大又粗视频| 亚洲一区日韩| 精久久久| 丁香婷婷大香蕉| 欧美在线综合| AA特级绝黄| 欧洲一区二区三区免费| 超碰成人公开| 久久国产精品视频| 动漫爆乳3D奶水一区在线观看| 国产99999久久精品| 色在线综合| 91最新综合| 91丝袜在线观看| 看日韩美女二区三区免费操逼视频| 综合97久久| 国产色精品午夜大片| 熟女高潮合集-永久久久-成人AV| 日韩性爱高清免费视频| 少妇的嫩逼图片| 男人的天堂在线有码| 密臀视频三区免费网站| 尤物av网站| 久久草草亚洲蜜桃臀| 青青草伊人久久| 国产精品白丝在线播放| 精品人妻一区二区乱码一区二区| 无遮挡一级毛片视频免费的| 91日产桃蜜| 丰满人妻一区二区三区在线| 国产欧美日韩在线不卡第一页| 欧美96精品在线| 久久久久久久少妇| 色噜噜精品一区二区三| 人妻丰满熟妇av无码区蜜桃| 91在线页| 污污汅18禁网站在线永久免费观看| 欧美夜夜骑视频| 乱伦熟女区| 国产熟女无套内射| 亚洲国成人情色好看电影| 新版天堂中文资源8在线| 99精品人妻| 熟妇精品juliaannAV| 综合久久六月久久婷婷| 大色综合| 欧美在线中M| 九九这里只有精品| 综合免费无码中文| 蜜乳AV免费观看| 伊人久久亚洲色欲综合网站 | 一区二区首页| 婷婷五月天激情小说| 你懂的在线观看区国产| 欧色网址| 午夜精品久久久99热蜜桃的功能特点| 爆乳免费黄网站| 国产亚洲性生活视频播放| 亚洲久久天堂| 330Dv国产女人终合视频极品人与兽| 青娱乐国产精品| 亚洲丝袜诱惑| 97鸡把在线视频| 人妻精品4K4K4K4K4| 在线无码操| 亚洲av性爱电影| 欧亚 另类 久| 精品二区久久| 97操在线| 中文字幕一区二区三四五区日日骚| 色妺妺在线视频| 欧美系列在线一区二区| 国产家庭乱伦表演| 性色aV一区二区三区噜噜| 4虎在线视频| 中文在线久久字幕| 91色综合激情| 天天看天天综合成人网| 啊啊啊啊啊啊在线看| 超碰成人国产| 最新日韩黄片| 91精品伊人久久久大香线蕉91| 欧美一二三级精品在线| 在线αⅴ| 成人26uuu| 干我久操| 日本人妻伦在线中文字幕| 97av在线观看| 亚洲av青草久久一区二区| 国产热av| 久久久极品| 骚逼自拍99| 天天看高清麻豆| 二对二中文字幕。| 亚州再线| 果冻传媒A片一二三区 | 日本在线不卡一二区| 日韩中文字幕人妻视频| 亚洲精品一二区| 久久 国产 无码| 日产欧美电影一区二区三区| 翔田千里AV无码秘 三区| 翔田千里AV无码秘 三区| 天天综合亚洲综合| 亚洲精品xxx| 嫩草影院在线观看精品| 亚洲成?V人片在线观看福利| 播播亚洲小说亚洲| 激情五月婷| 丁香婷婷久久 | 人妻少妇一区二区| 情色日播放AV| 精品十三区| 97欧美久久久久久久| 亚洲交换| 麻豆久久精品亚洲精品88 | 亚洲欧美成人在线| 国产玖玖| 91AV国产精品| 酒色综合网| 91美女视频| 91性高朝久久久久久久久| www.久久制服糖| 色yeye成人免费视频| 日本免费专区| 免费夜夜爱黄色视频毛片| 国产农村妇女一区二区| 国产极品久久久| 日韩不卡网操逼中文字幕日韩| 男人天堂无码| 豆花视频操逼网址| 熟女六十路| 欧美熟妇视频| 天天日天天屌天天操| 综合少妇网| 精品国产一区探花在线观看| 凸凹视频在线观看| 91人妻丝袜无码| 精品二999| 97Ai亚洲| 天堂中文资源在线bt| 日韩国语字幕| 热的中文 热的有码 热的国产| 伊人性在线视频| 天天色图| av凤凰久久久| 天天看特黄的免费网站| 久久久不卡| 欧美成人四级在线播放| 麻豆区99999| 日本国产二线女色| 高清无码 国产精品| 亚洲日产专区| 欧美一区二区| 久久免费精品视频免一| 婷婷激情一区二区三区俺也去| 综合色久欲| 老司机深夜18禁污污网站| 99热这里是精品| 91欧美综合在线| 乱伦熟妇一区二区| 搡老女人老妇女老妇老熟女怎么读| 综合激情一一91| 亚洲av国产av综合av卡| 伊人久久亚洲中文字幕| 女色综合| 爱射综合| 日韩黄片视频试看| 日本97久久久精品| 日本人妻伦在线中文字幕| 中文字幕一区 二区三四五 区日 日骚| 日本最新1区2区3区| 在线播放成人高清免费视频| 一区=区三区视频| 外站AV在线| 日日碰狠狠添天天爽超| 久湿久久| 五月丁香婷婷啪啪| 中文字幕1区2区| 激情久久av一区av二区av| 一区二区视频你懂的| 亚洲一区中文精品| 国产天天骚| 97超碰欧美| 亚洲国产一区二区三区在线| 日本精品一区二区三区四区的功能| 91超级碰碰碰| 亲子敌伦对白在线播放| 加勒比少妇AV婷婷六月天超碰超碰| 极品欧美一区二区三区| 躁躁日曰躁2020| 国产日逼视频| 亚洲精品一区二区免费在线观看| av最新免费中文字幕| 91天堂视频| 影视综合无码少妇| 91熟女视频网| 激情六月天| 91爱| 久久熟女久| 黄色小视频日本txt| 日韩91网| 日韩精品三区四区| 天天草夜夜草高潮片| 日日A∨| 国产白嫩漂亮KTV在线| 男人天堂网手机版婷婷| 久久天堂婷婷网| 99热伊人| 欧美激情久久久久| 超碰成人免费| 日产操逼| 青青草原av| 综合色图,成人综合网| 国产一区二区免费福利片| 日韩天天本| 97操操| 在线视频免费观看午夜| 国产自产22区| 99九九久久| 在线观看日韩av不卡| 久热最新在线杭州| 美女毛片999| 超碰97起碰| 日本免费一级AAA大片器| 伊人在线大香蕉视频久久| 夜色AV无码手机在线影院| 另类图片天天影视| 久草色在线观看| 性色avv| 日本片日本片祼观看网站在线看中文版网页在线看| 国产欧美在线观看免费观看| 四虎免费视频| 殴洲老熟女| 99精品无码| 中文字幕日韩人妻视频一区二区三区| 中文字幕乱码在线| 97在线播放| 成人日韩中文字幕| 色婷五月| 开心婷婷五月| 日本欧美成人片AAAA| 日本激情免费大片| 日本一区二区三区免费观看| 神马午夜久久| 91大香蕉伊人| 欧美国产操逼| 国产偷仑| 欧美激情片一区二区| 激情小说五月天| 久久社区一区二区三区| 久久精品人人做人人看| 蜜臀视频网站| 天天综合-91入口| 久草看看看| 人妻无码视频一区二区三区久久| 亚洲综合码| 色噜噜综合网| 快点操死我| 激情婷婷丁香| 无码色| 强奸乱亚洲| 逼逼逼逼操操操操操操操操操午夜剧场 | 狠狠躁伊人中文字幕| 五月开心久久AV官网| 天天操天天射青青草| 色色色综合网| 120分钟婬片免费看| 五月婷婷爱六月丁香色| 天天肏夜夜肏| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 毛片电影一区二区三区| JULIA一区二区三区在线播放| 国内毛片婷婷六月色| 性爱乱伦视频免费| 操高情无码| 欧亚性爱啪啪| 97av在线视频| 熟女精品一区二区三区| 毛片17S| 殴美综合色88| 中文字幕精品专区搜索结果91| 97超碰这里只有精品| 91激情综合| 久久r精品| 91色欧美| 一级乱伦网站| 亚洲AV操| 欧美图片偷拍| 一区二区视频你懂的| 福利在线视频一区二区| 超碰在线1234区| 国产欧美日产一区二区三区 - 国产欧美日 | 久久久精| 青青草国产欧美非洲黑人| 啊啊啊想要| 高潮的A片激情扒开一区| 综合欧美激情网| 制服乱伦| 99.色网| 九九九九九九九九九五码| 青久久| 91综合熟女| 人妻偷拍一区二区三区| 亚洲精品日韩国产欧美| 激情五月婷| 啊好爽受不了无码| 日韩成人人妻网站| 操b在线观看| 最近2019中文字幕国语免费版| 欧美一级色| 91精品人妻一区二区三区蜜桃臀| 欧美国产操逼| 超碰色综合| 99色热国产视频精品| www九九热| 欧美第38页| 久久成人东京热人妻| 夜草网站| 婷婷在线视频| 亚欧洲一区二区视频| 国产精品国产精品国产| 激情干在线| 久艹伊人精品综合在线| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 国产热RE99久久6国产精品首| 成 人 影视 一区 二区 三区 四区 | 锕锕好爽 死我在线观看| 日夜伊人网| 国产激情在线观看| 天天澡天天爽日日av| 欧美色图片| 男男H黄动漫啪啪无遮挡网站| 亚洲AO在线| 亚洲综合网91| 影音先锋中文字幕日本好一区二区 | 欧美亚洲今日在线| 凸凹视频在线观看| 在线黄色污污网站| 一本色道综合久久欧美| 成人精品电影| 亚洲另类天堂| 国产精品一二三免费网站| 欧美色图成人网一区二区| 久久久久久久强迫| 无码91| 97碰久久| 男人天堂婷婷五月天校园春色| 日日AAvv| 九久9精品| 果冻传媒一区二区三区| 首页中文字幕中文字幕免费| 国产精品69久久久久孕妇欧美| 亚洲AV无码翔田千里网站| 免费人人搞97| 高清国产性猛交xxxx乱大交| 天天日天天射天天干| 成人性爱免费播放| 亚洲中文字幕乱码无码一区二区| 日本精品五区| 亚洲一区二区三区麻豆传媒| 秋霞怕怕片| 男人的天堂.com| 国产中出内射一区二区| 久久一留热品黄| 成 人 A V免费视频在线观看| 成人AV素股で擦久久| 欧美综合1性辶| 1024亚洲中文字幕久在线看片你懂的 | 婷婷色色网| 成人性交午夜免费片| 国产亚洲在线观看| 日韩三级在线观看网站| 亚洲第一二区另类图| 国产操逼视频在线观看| 欧亚韩国999| 久热大香蕉| 青娱乐妇女性生活| 蜜臀av中字字幕网站| 98人妻精品一区二区色欲| 欧美熟女丝袜| 一块操欧美性爱| 欧美天天综合网| 欧洲乱码一区二区| 色网在线视频观看免费| 美女爽到高潮91| 久操黄色视频| 试看日韩黄片| 欧美在线干| 日本色婷婷| 欧美区亚洲区偷拍区| 91色s| 丝袜 亚洲 偷拍| AA级电影三区| 老女人碰碰在线碰碰视频| 亚乱色| 国产精品熟女一区二区三区| 亚洲一二三精品久久网| 色综合婷婷| 18禁看网站一区| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场| 九九久久综合| 亚洲91在线播放影院| 国产97av| 久久精品夜色国产亚洲AV| 麻豆人妻精品一区二区| 思思热久久成人| 高清无码人妻久久久一区二区三区aⅴ| 亚洲色9| 男人a天堂手机在线版| 夜色综合| av影院十区| 熟妇人妻一区二区三在线 | 精品综合久久久久久五月天| 青青久日| 桃色人妻在线视频| 国产午夜福利视频在线| 欧美嫩性色| 亚洲色啪| 日韩精品一区二区三区色欲| 又粗又长又爽在线观看| 3PAV乱伦视频| 人妻欧美| 精品一区二区三区蜜桃| 草久久久| 97视频在| 婷婷激情一区二区三区俺也去| av九九| 欧美日韩香蕉| 福利操逼| 久久东京伊人一本到鬼色| 97干在线视频| 久久久性少妇| 大干人妻| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 90后性网国产欧美| 少妇高潮对白在线观看| 色色色色日本| 啪啪资源网| 国产精品毛片?v一区二区三区 | 欧美性爱另类综合| 色欲日韩欧美在线一区| 国产一区二区精品久久99| 91看黄片| 国产丝袜美女在线一区| 中文AV制服乱伦| 可免费观看的av毛片中日美韩 | 爱爱动态试试看6 0秒| 天天影视网综合少妇| 超碰99在线观看| 婷婷丁香六月| 五月丁香啪| 蜜臀国产AV中文字幕| 色av中文字| 丝袜内射| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 手机av亚洲丝袜美腿日韩第一页二页| 亚洲情色在线| 日本999精品| 九一综合网| 日韩人人精品| 亚洲第一页色网| 夜夜爽夜夜操| 一级婬片120分钟试看| 岛国毛片手机在线观看| Blackedraw视频一区二区| 丝袜熟女一区二区三区| 五月丁香综合激情| 九久9热| 金典av| 色图综合| 夜夜操青青草| AV综合中文字幕干| WWW4虎| 久久神马影院| 久久精品一区一起草| 91中文字幕| 韩国一级婬片A片无码天美 | 欧美大战久久久伊人| 大香蕉日韩欧美| 亚洲成a人v欧美综合天堂下载| 久久午夜鲁丝片| 大伊香蕉在线视频免费| 久久精品一区二区三区不卡| 久久最新视频免费观看| 99超碰网| 69XX一中文字幕人妻91| 久久久免费一级黄片| 国产女人高潮视频| 色臀aV| 久久男人天堂| 丝袜熟女一区二区三区| 爆乳免费黄网站| 精品人妻久久久| 久久日韩精品一区二区| 激情五月综合网| 美骚妇av高清在线| 91欧美色| AV无码久久久精品| 97超碰巨乳| 欧美少妇色图| A片 AV一级在线播放观看免费 | 欧美天天| 久久9视频| 久男人久久| 极品欧美一区二区三区| 国产成人亚洲精品自产在线| 久久九操在线观看| 麻豆视频国产一区二区| 欧美一级三级| 午夜啊啊| 国产成人www免费人成看片| 日本女厕偷拍| 操碰97| 欧美日韩99| 欧美中字不卡| 人妻人人做人人澡人人爽欧美一区| 亚洲高潮少妇| 99后入| 日逼视频日本| 青娱乐大香蕉| 亚洲 欧美 精品专区 极品| 天天爽夜夜操| 久久加勒比| 欧美一级色| 干b网| 殴美大黄片| 一二视频神马久久传媒| 亚洲精品一二区| 国产精品欧美激在线| JIZZJIZZ亚洲女人被躁| 97色在线观看| 色吧 综合| 旡码电影特区| 国产婷婷综合在线观看| 青娱乐av在线| 亚洲āv网址在线观看| 国产免费大片| 中文乱码字字幕在线第5页| 91久精品| 十八禁av无码免费网站APP| 九九九久久久久| 久操网无码在线| 久色99999| 大伊香蕉在线视频免费| 淫穴高潮色图| 99爱视频| 亚洲中文字幕在线视频一区二区| 后入内射蜜桃臀| 伊人黄色片| 91精品人妻一区二区三区蜜桃臀| 亚洲小电影免费涩涩成人在线高清| 极品后入免费视频| 人人插人人摸人人| 亚洲自拍小说| 95精品在线| 操日韩第| 亚洲激情在线| 偷窥自拍亚洲色图| 69少妇一区二区| 亚洲中文字幕一区| 色99在线| 女欧美一区二三区| 91精品免费| 色色五月婷婷| 免费αV在线视频| 欧亚久久偷拍视频| 国产精品成人在线| 无码久久国产 | 日韩一级成人毛片免费观看| 久久春色| 性爱AV天堂| 色婷婷电影网| 7777奇米影视久久| 超碰色大香蕉| 国产精品情侣啪啪| 天天躁日日躁AAA片李宗瑞| 97这里有精品| 丝袜亚洲91| 日韩欧美视频青青| 啪啪免费| 精品久久无码午夜福利| 久久久性少妇| 爽爽爽免费视频| 日韩av乱伦| 国产精品ⅴ无码大片在线看.| 九t超碰| 色制服丝袜夫妻av一区| 色婷婷激情| 中文字幕亚洲永久精品| 日本色日夜干| 激情小说亚洲图片| 韩日男人的天堂| 精品超碰国产| 亚洲一区二区三区不卡国产欧美| 97综合激情| 国产偷仑| 美腿色图| 亚洲精品久久久久久久久豆丁网| 一区二区视频在线播放| 夜夜草天天| 手机在线大香蕉| 97超级色碰碰| 啊啊啊啊啊啊啊在线| 97玖玖人妻| 99精品在线| 国产精品熟女丝袜一区二区| 综合国产影视三级| 日韩成人性日韩成人性爱视频在线免费观看| 97在线欧| 9999久久久久| a人欧美综合天堂麻豆| 99re6久热只有精品6在线直播 | 国产av青草| 女同在线视频一区| 精品久久99| 欧美性爱五月天| 在线国产探花| 91 亚洲 欧美 日韩 国产 综合| 牛牛操视频逼| 无码操逼视频一下| 大香蕉视频一二三区| AV乱伦国产| 国产激情视频一区区三区| 精品人妻一区二区三区视频在线| 天天综合,91入口| 综合欧美色图| 久久久久白虎| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 影音先锋日本乱伦| 亚洲电影中字一区二区| 一级性爱视频免费观看| 麻豆久久精品亚洲精品88| 日韩欧美加勒比| 国产熟女精品一区二区| 久久久久久久久9| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲日韩视频二区| 日本性爰一道本| 国产专区第一页| 91精品啪在线观看国产城中村| 人人操人人操草草| 懂色av色欲av蜜臀av| 国产亚洲精品玖玖玖在线观看| 日本一区二区做爱的视频| 美国日韩黄色片| 国产成人+综合亚洲+天堂| 99这里有精品| 中文久久一区| 男人的天堂在线| 亚洲精品97久久中文字幕| 有码专区最新中文字幕有码| 欧亚 另类 久| 亚洲国产成人精品久久久国产成人一区二区 | 少妇xx精品| 亚洲aV无码成人在线观看| 亚洲色图亚洲无码强奸乱伦| 久久久久成人蜜桃精品| 熟女一区二区| 人妻超碰青青草98| 少妇无码999| 国产欧美日本亚洲精品| 乱伦系列一区二区| 翘臀vidoes| 欧美猛交黑寡妇中文字幕| 熟女熟妇伦久久影院毛片一区二区 | 91亚洲在线| 强奸抽插av| 高清在线偷拍自拍视频| 天天欧美色| 综合久久99亚洲人妻中文在线| 欧美综合色图片| 亚洲双插| 国产 日韩 欧美高清| 久热大香蕉| 综合干干干av久久久综合网 | 免费观看啪视频| 99少妇精品视频| 熟女网站最新| 搡老女人老91二区| 一区操逼日比视频| 日韩精品人妻中文字幕有码午| 久草久日| 国产二区三区免费视频| 六月激情婷婷| 久久久久ab| 丁香色狠狠色综合久久小说| 欧美性爱三区二区| 午夜久久一区二区无码中出| 一本一道久久综合久久| 不卡中文字幕aⅴ在线| 熟女精品一区二区三区| 青青操视频在线| 97超碰人人模人人拍人人| 亚洲乱熟女一区二区三区大香蕉| 少妇天堂网络| 青娱乐休闲视频在线观看| 九九无码视频| www被窝色com| 欧美Aⅴ| 乱人伦 国语对白:视频直接看| 亚洲人久久久网| 日本孕妇一区二区视频操逼免费看 | 午夜操逼不卡| 激激五月| 九九九国产| 黄色av网站在线播放| 一区麻豆 高清中文字幕| 欧美日韩中文字幕不卡| 人人射人人操人人摸| 精品人妻一区二区乱码一区二区| 999久久久九九九九| 99热只有这里有精品| 北京美女一区二区| 夜夜操美女| 婷婷五月天久久精品视频一区二区三区 | 亚洲图片日本AⅤ欧美在线| 免费视频在线观看啊啊啊啊啊| 欲色综合| 超碰久热| 好吊色综合| 中文伊人大香蕉视频| 凌辱美少妇久久aV| 日本三级韩国三级99| 欧美视频一区二区三区| 日本肉体xxxx裸交| 一区二区三区看视频| 国产女性无套 免费观看| 91色s| 欧美人人AAA| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 综合网亚洲1| 日韩精品视频在线观看一卡二卡| Aa东京男人的天堂| 国产欧美日韩精品中文| 殴美色网| 日本大片日本一区二区免费高清| 一区二区影视| 宅男91视频在线播放| 亚洲影视综合| 精品十三区| 成在线人在线观看视频| 成人天天爽| 免费看日产一区二区三区| 97视频免费播放| 亚洲中文字幕妇伦久久| 日韩性爱免费观看视频| 一区二区三区色综合| 韩国黄色片精品久久久| 91黄站| JULIA人妻风俗店中出电影| 欧美 精品国产制服第一页| 色亚州人久干视频在线观看免费版| 久久激情亚洲精品无码?V| 精品熟妇视频一区二区| 97九色人妻| 综合欧美激情网| 91精品国| 亚洲欧美九九九| 日韩不卡在线一区二区| 色婷婷一区二区三区久久| 欧美 传媒 麻豆 日韩 偷拍| α√在线| 亚洲97| 九九这里只有精品| 综合色图区| 一区二区三区高清天码| 日日骚av| 天堂射| 天天日天天爽| 亚洲天天做日日做天天谢日日| 呻吟 欧美 日本 中出| 嗯嗯,啊啊,国产精品| 日韩黄色一区二区三区| 九九AV| 亚洲清纯唯美| 无码heyzo高清一区| 91足交| 日本精品五区| 91国产伊人大香蕉| 日韩久久艹| 亚洲综合激情五月久久| 国产黄色小视频网站| 91美女视频。| 大香蕉综合在线| 中文无码一二三区| 午夜色婷婷| 国产人妖的免费的视频| 麻豆亚洲AV成人无码久久精品| 午夜精品99久久久久传媒| 粉嫩绯色AV一区二区在线| 午夜男女爽爽爽影院视频| 久久久月天| 日韩欧亚中文在线| 欧美五区| 亚洲情色婷婷五月天| 91黑人无码激情在线| 中文字幕97| 超碰在线91| 超碰97导航| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| AV电影在线播放| 99久久婷婷丁香| 操逼逼一区视频| 91激情| 亚洲色人| 九九九精品美女| 92大香蕉| 色777999综合| 青青操日韩| 色网1| 九九热精彩视频| 精品人妻一区春色| 欧美精品久久96人妻无码| 极品五月天噜噜| 激情五月天色播| 久久黄黄| 熟女丰满人妻一区| 伊人久久婷婷| 色嗨嗨在线| 每日更新AV| 久久精品店| 成人网站 免费观看| 亚洲精品中文字幕一区在线视频| 精品国产人成在线| 午夜激情成人在线观看| 九九视频黄色片| 国产一级特黄大片处女| 天天色天天干天天爱| se吧提供国产乱老熟视频胖女人| 超碰成人人人爽人人爽| 97视频免费在线观看| 91精品91久久久久77777俄罗斯老妇姓x| 久操免费视频| 97超碰站| 水多多映视AV| 人人模人人看| 国产9区| 国产亚洲深夜激情| 中文字幕一区二区日韩网| 国产女人与拘做受视频免费| 国产精品视频白浆免费| 亚洲国产欧美中日韩成人综合视频| 亚欧高清v| 99久久综合| 亚洲男人天堂网久久| 少妇极品熟妇人妻无码| 黄色十八禁| 一二三区视频在线观看| 色综合91好| 乱性AV| 人人摸人人摸人人干| 五月天色综合| 欧美亚男人的天堂| 色偷综合| 91肉丝| 久久精品国产亚洲AV高清演员表| 国产高清精品一区二区三区毛片 | 九区国产| 日韩色香| 国产专区第一页| 91GD.COM| 国产精品一区二区三区在线密挑| 亚洲综合99999| 亚洲在钱| 91香蕉国产尤物视频| 国产亚州精品美女久久久免费| 综合啪啪| 伊人影院中文字幕| 欧美激情久久久久| 性生活性生大爱77AV国产| 91综合在线| 亚洲αv一区二区三区| 久久久啊啊| 日本蜜桃| 色婷婷久久| 国产精品一区二区校花| 玖玖在线视频| 热久日综合| 97视频在线播放| 人人摸人人添人人操| 嗯嗯嗯啊啊啊在线免费观看| asc国产精品| 你懂的在线观看区国产| 无码日韩网站| SUV一区二区在线看| 伊人网高清| 黄色视频特级毛片| 欧美韩国你懂得在线| 国产熟女自拍| 日韩免费高清大片在线| 日本狠狠干| rivers-china.com| 国产精品 久久久精品一牛| 嗯啊不要啊在线| 人人妻人人爽人人精品| 操逼天美3区| 久久9 9 9精品| 欧美激情专区| www.超碰在线| 九热超碰| 丰满少妇乱子伦精品无| 97视频在线观看高清资源| 日日骚中文字幕| 97av在线视频| 亚洲涩图欧美| 午夜福利av电影在线| 熟妇人妻一区二区| 亚洲精品99999| 91狠婷| 天天cao在线| www色色com| 久久久久成人网| 天天色播亚洲综合网站| 日本精品性生活久久久| 无码国产Av| 自拍视频大全亚洲专媒视频/一区二区三区 | 97欧美| 97超级久久强资源| 欧成人精品一区二区三区| 亚洲成?V人片在线观看福利| 国产夫妻性生活视频| 1禁看欧美黄片免费看| 欧美在线色| 伊人女女资源在线观看| 天天超级碰碰碰| 日本日逼高清| 台湾佬中文娱乐网久久久久久久久久com | 欧美综合 站| 思思热免费在线视频| 美女诱惑在线一区| 岛国艾薇凹凸视频天堂| 无卡一区=区| 日本 欧美 国产一区| 日逼97| 国产黄a三级三级三级av在线看| 偷拍亚洲情色| 狠狠色婷婷7777久| 999999精品| 精品福利视频| 岛国免费视频在线| 亚州春色| 日韩欧美字幕亚洲一区二区| 久久久国产精品亚洲精品| 亚洲国产一区二区三区四区国产| 9 1超碰九色| 日日夜夜干| 无码一区免费在线不卡| 日韩精品人妻中文字幕久久久| 久久久久久亚洲Av无码精| 久久久久9999精品九九九| 另类专区在线观看| 91丝袜美女视频| ′ !γ}丶。。久久精品欧美一区二区三区 | 国产在线视频午夜精华在| 91美女色视频亚洲| 国产麻豆一级精品视频| 97Ai亚洲| 99蜜桃臀久久久欧美精品网站| 五月天玖玖资源站| 日本不卡中文| 久久99手机免费视频| 天天干夜夜操网| 17c嫩草51久久91嫩草| 久久日本熟女精品一区| 97国产成人精品免费视频| 超碰欧美| 久久精品成人一区二区三区蜜臀| 久久‘黄片视频| 久久成年片色大黄全免费网站| 亚州色阁| AV一二区| 免费观看啪视频| 欧美真人抽搐一进一出gif | 中日亚韩免费视频| 欧美91网| 欧亚日韩三区| 一本道综合色图| 大香网站| 欧洲亚洲人妻无码高清久久三区四区| 久99| 手机在线A片| 欧美黑人与女人91| 加勒比五月天| 九久久九精品视频| 久久综合婷婷| 成全在线观看免费观看| 91亚洲黄色网| 新精精品久久精品| 久久本道| 一二三区在线| 国产一区二区av综合| 色欧洲| 午夜操一视频一区| 老鸭窝黄色视频网站| 亚洲综合另类欧美久久久| 成人性爱电影网| 沈阳熟女高潮对白视频| 久久欧美激情| 一区二区不卡免费| 婷婷久久网| 国产9l 大屁股| 久久人妻一区二区三区高清| 精精夜夜| 97人人操人人干| 一区三区啪啪| 嗯啊视频免费在线观看| 岛国黄片网站| 欧美91精品国产自产| 色97欧美| 夜夜做夜夜爽精品视频| 四虎国产成人精品免费一女五男| 大香蕉亚洲中文| 在线另类| 久久久九九网站| 熟女突然公开看18禁影片| 性久久| 26uuu偷拍亚洲欧洲综合| 日韩精品一区二区高清| av影片在线观看不卡| 美女诱惑久久| 91国产丝袜白虎| 91无摭挡| 99热线麻豆 | 欧美日韩夜夜| 欧美制服另类丝袜| 欧美综合自拍成人自拍第二十页| 伊人久久婷婷| 日本超碰在线国产一区| 天天日天天色| 天堂av2019| 一区,二区,三区网站| 国产农村妇女精品1区二区| 久热久一区二区三区| 欧洲天天在线|