日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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猛片| 亚洲日韩美国人妻| 物尤视频一区二区| 天天噜| 国产欧美精选自拍一区| 亚洲一区二区性爱电影| 久久久久久久久九九久孕交| 日日摸天天爽夜夜欢| 韩国成人精品久久久免费看 | 久久久久女教师免费一区| 中文字幕精品一区二| 920日本午夜免费| 91爱欧美| 国产精品露脸在线观看| 91肏屄网| 女性喷水高潮在线观看| 大稥蕉免费视频这里只有精品| 长久操视频| 翔田千里无码一区| 免费黄色片子| 蜜桃网熟妇| 9久超碰| 男人的午夜天堂| 欧美视频第二页| 久久系列| 91久青| 久久精品| 国产老熟女| 国产成人超碰在线| 91最新综合| 久久超碰国产一区二区三区| 麻豆福利视频导航| 久久精品国产AV一区二区三区| 大香蕉人妻| 伊人久久久日韩一区| 色屁屁影院www国产| 97中文天堂| 久久伊人最新网址视频| 午夜性| 欧美中文字幕日韩在线| 日本加勒比无码专区一二三| 色狠狠综合| 91狠狠狠| 人妻日日夜夜精品 | 欧美高清18A片| 五月丁香激情啪啪| 成人性生活高清视频在线播放| 97人人操人人干| 偷拍2020| 日韩伦理视频| 91动漫操逼视频| 啊啊啊好大好深| 激激五月| 国产女人和拘做爰视频| 日日干日日摸| 日日日啊啊啊| 成人性爱美曰韩| 97久久天天综合色天天综合色电影| 干婷婷综合网| 亚州,欧美在线| 啊啊啊啊啊啊啊国| 久久av成人无码免费| 亚洲 欧美 日韩另类 麻豆| 五月天婷婷激情| 校园春色综合网| 欧美亚洲高清不卡| 五月天久久综合网| 99热在线只有精品| 麻豆九九九| 天美传媒婬乱在| julia ann久久| 欧美性爱中文字幕无线码| 日本性爱少妇| 午夜精品探花| 粉嫩av在线一区二区| 91狠狠综| 久久熟女精品不卡一区| 久久9精品视频| 国产福利电影| 成人小电影网站tex| 九月AV| 色婷婷九月天天综合| 91成人无码| 99色色| 天堂俺去俺来也www久久婷婷| 亚洲乱熟女一区二区| 农村妇女一级二级三级视频| 亚洲AV成人精品网站在AV| 天天综合网亚洲综合网| 在线黄色污污网站| 美腿丝袜高跟网免费视频免费视频| 国产女人成人精品视频| 亚洲欧美日韩免费电影| 骚女天天综合网| 日韩精品9999| 狠狠狠一区二区三区| 抽插无码高清一区| 久久的免费性爱视频| 中文字幕乱偷人妻久久艾草网| 丁香六月啪啪| 免费毛片在线播放| 大香蕉黄色一级片免费看| 校园激情狠狠四射| 亚洲有薄码区久久在线一区| 97超碰逼| 亚洲精品天天影视综合网 | 亚洲综合图片在线| 中文字幕-区二区三区四区视频中国| 99精品久久| 久久精品国产精品一区| 色图四区| 性色A∨91| 青青五月天| 性高潮久久久久久久久久久| 欧美日韩大陆黑人少妇99| 婷婷丁香五月激情啪啪| 夜夜草网站| 操国产逼| 中文字幕久热视频在线| 永久免费av无码网站国产app| 亚洲天堂2020| 另类小说欧美激情校园春色| 春色综合网| 成人小电影网站tex| 国产97在线播放| 桃色人妻在线视频| 久久久久久久久久久久九| 插老姨肥穴| 欧美熟女丝袜| 色情亚洲日本成人| 91精产一区二区三区| 自拍亚洲综合| 国产丁香精品露脸视频| 日韩欧美日韩| 亚洲高清视频在线免费观看| av无码精品久久久久| 免费av在线播放二区| av爱爱爱| 国产精品免费久久久久久久久久| 九九精品99| 国产毛片久久久久久久| 亚洲欧洲综合av在线| 国产精品久久久无码AV网站| 在线啊v一区| 91av一区二区在线观看| 久久精品国产亚洲AV无码做| 嗯嗯嗯好爽| 熟女自慰久久久| 亚洲国产精品久久久男人的天堂| 97超碰色中文字幕| 欧美 亚洲 在线| av天堂加勒比| 精品三级在线专区| 99国产在线 精品 视频| 五月丁香婷婷综合| 久久一留热品黄| 蜜臀久久99精品| 欧美亚洲特P| 中文字幕,人妻,日韩| 一级@啪啪视频| 婷婷久久大香蕉| 欧美黄色图片| 97在线公开视频| 蜜臀AV午夜精品久| 久操操AV电影| 91久久18禁| 天天综合网~91| 91狠狠综| 蜜乳AV一区| 99热在线播放| julia ann久久| 欧美性生活男人的天堂| 亚洲操逼视频网站| 久久久熟妇熟女国产| 亚洲成人在线乱码色午夜| 国内精品久久人妻性色av| 色香色欲天天综合网天天来吧| 亚洲另类久操网| 热热色色综合| 国产v片在线免费观看| 中文久久爆乳| 人人摸人人舔一区二区| 东京太热男人的天堂久久久| 久久‘黄片视频| 亚洲乱色熟女一区| 精品人妻免费观看| 日韩精品字幕| 亚洲中文日韩精品| 怡红院成人av| 蜜臀久久99精品久久久电影| 久久久99久9| 色播丁香| 交换娇妻呻吟声不停中文字幕| 成人在线视频网| 日本大香蕉| 人人澡人人澡人人| 日韩乱中文| 国产午夜视频| 国产婷婷综合在线观看| 91精品国产综合久久久蜜臀| 91宗合网| 91色情黑丝搞鸡在线观看一区二区三区三州 | 精品国产乱码久久久久久口爆网站| 无码人妻丰满熟妇奶水区毛片| 色香天天| 麻豆黄色五月天| 综合 亚洲 欧美| 国产女人成人精品视频| 91bbbbbb| 99久久网站| 91高清欧美| 夂久色| 亚洲男人天堂AV| 999久久久精品国产| 大香蕉中文201| 99国产精品人妻人伦| 99热| 青青草字幕AV| 色九九九九久| 84YTCOM性无码| 日韩丝袜人妻AV| 国产又黄又爽又刺激久久久久久| 亚洲色图自拍| 狠狠狠狠狠狠| 强奸乱伦中文字幕AV| 亚洲人人夜夜澡人人爽| www超碰| 99热在线播放| 日韩精品操少妇| 亚洲av淫乱| 丰满人妻-区二区三区免费看| 日日干日日| 男人女人18禁片免费看网站| 91美女看B| 国产成人无码久久精品| 另类图片欧美激情综合| 亚洲AV不卡在线观看| 亚洲天堂区| 久久综合亚洲色1080p| 亚洲第一男人天堂| 久操99| 日本三级网页| 无码人妻一区二区三区色欲aⅴ| 婷婷15月天青娱乐| 97久久久久久久精| 亚洲精品美女久久久久久久久| 97久久超碰| 天天日熟妇| 精品久久在线区一区| 综合操逼| 国产精品久久aV| 久久久久96| 九九热免费在线国产视频伊人五月| 精品欧美А∨无码黑人大荫蒂| 麻豆天天躁天天揉揉AV| 综合网欧| 天美传媒国产原创中文字幕亚洲欧美另类 | 黄色人人| 亚洲欧美色图| 蜜臀99久久精品久久久懂爱| 精品国产乱码久久久久久日本公司| 色综合美国| a v网站在线播放| 欧美色亚洲| 97超色| 日韩99神马视频播放| 99色在线视频| 亚洲精品a人片在线观看视| 囯产精品久久久久久久久久梁医生 | 乱老女人一区二区视频| 99在线免费公开视频| 天堂性色| 九九久久久| 久久精品99| 偷拍超碰| 熟妇精品juliaannAV| 天天日B狠狠操| 激情综合五月丁香| 日韩性爱视频免费在线| 国产欧美日韩一区二区三区| 约操熟妇| 欧美性爱日韩性爱| 97人人操人人摸人人爱| 老司机天天操| 飘花国产午夜精品不卡| 极品销魂美女一区二区| 精品无码欧美三级| yaouchengrenav| 国产精品一区二区三区免费视频| 五月天婷婷社区| 色香网| 狠久久| 久久久久女教师免费一区 | 日本 免费 一区二区三区 久久香蕉| 九九在线精品| 狠狠操天天干| 999久久久九| 亚洲s在线观看| www.操| 欧美熟妇精品黑人巨大一二三区| 91色鬼| 亚洲激情 欧美色图| 亚洲精品国产AV天美传媒| 欧美无圣光在线| 97这里都是精品| 97日视频| 超碰欧美97资源| 久射吧| 大香蕉伊人75| 毛片久久| 日韩精品中文字幕一| 成人性爱视频在线看| 日韩 欧美 视频 在线 一区| 去干网最新版| 亚洲午夜免费狠狠干| 操久久久久久| 用力操死我| 午夜福利在线视频1000| 婷婷探花久久精品一区| 日韩九九九| 久久精品一区二区一8| 国产一区二区免费福利片| av网站在线观看了| 色五月网址| 性欧美另类高清| 99国产精品免费| 一本色道久久综合亚洲二区三区| 美女久久久久久久久久久| 人人性爱视频免费| 国产一级作爱毛片| 欧美日韩国产在线| 亚洲情色图片区| 超碰 国产熟女精品一区| 日韩青久久| 96精品久久| 无码人妻精品一区二区中文| 五月天激情四射| 亚洲综合码| 欧美色图99| 国产精品99999| 狠狠操夜夜| 亚州乱码中文字幕综合久久久| 蜜臀久久99精品久久久久久无删减| 欧美啪啪啪91| 久久,精品一二三| 亚洲蜜臀懂色| 丁香六月激情| 91大神精品长腿在线观看网站| 很黄很污的免费网站| 婷婷五月综合激情| 九九国产热| 亚洲Av诱惑| 免费精品中文字幕| 97精品国产97久久久久久免费| 无码人妻精品一区二区三区九九| 96精品久久久久久久久| 偷窥自拍A片| 99热导航| 99热在线观看| 天天躁日日躁AAAXX| 麻豆一区在线| 人妻精品视频一区二区三区| 日韩高潮一区| yazhouzaixian| 黑人精品XXX一区一二区| 开心五月激情网| 丝袜天堂网| 黄色电影在线播放综合网站| 男人的天堂2018.| 日比av无码| 国产精品制服丝袜清纯唯美| 偷拍在线观看视频| 国产精品人人爽人人做可爱福利| 97九色人妻| 欧美啪啪啪91| 99热99色| 东北女人高潮视频| 国内毛片免费h片在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 日韩天堂av电影在线观看| 亚洲,欧美,综合网| AV免费在线播放一区| 加勒比日本在线| 被窝影院午夜看片无码| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 九九久久久| 大香蕉伊人久久| 欧美后入式| 亚洲av淫乱| 99国产精品自在自在| 国产一级操B视频| 亚洲男人的天堂网| 国产亚洲中文不卡二区| 日本久久久精品电影| 精品亚洲国产成人av网站| 91嫩草欧美| 秋霞一级鲁丝片A片| 1024亚洲中文字幕久在线看片你懂的 | 一区二区三区免费岛国片| 超碰97爽| 波多野结衣AV无码一区| 欧美色图天堂网m| 澳门黄片一香蕉视频| 在线女人91| 人人操人人爽人人操人人| 色蜜AV| 五月婷亚洲精品天堂| 欧美午夜精品久久久久久超碰| 不卡二三区人妻少妇| 亚洲激情久久| 精品国产av一区二区三区四区入口| 黄页18禁| 日逼逼免费看| 校园春色第一页| 精品区9| 97超碰人人操人人操| 六月丁操逼| www..com操老师| 曰本道人妻久久久在线不卡色视频| 3P乱轮视频| 久热伊人| 人人澡综合涩| 欧美啪啪女女| 综合久久97| 精国久久一区二区三区98| 人人操人人叉人人插人人| 久久久无码精品人妻二区 | 国产浮力影院第1页| 91成人精品| www四虎| 欧美91视频| 大逼色网站| 欧美综合第一| JULIA一区二区三区在线播放| 久久人妻熟女一区二区| 精品人妻视频一区二区三区蜜桃视频| 欧美精品1区2区3区| 东北女人无套内谢视频| 97超碰中文| 亚洲色图激情小说| 国人欧美精品一区二区| 91精片| 亚洲综合性网址| 婷婷月色| www网站黄| 操操操五月天婷婷丁香影院| 99在线精品观看视频中文| 日韩一级二级在线| 精品久久久亚洲AV成人网站| 精品中文字幕一区二区| 超碰97色| 91美女小视频| 亚洲人妻色图| 国产人妻精品一区二区三区秋霞 | 一个人在线看的黄色电影网站| 日韩视频啪啪| 日本操逼视频不卡直接放| 久久久青青草| 日韩精品人妻中文字幕不卡乱码| 久久伊人青青草| 老色69| 亚洲一区日韩| 欧美强奸乱能| 欧美性爱日韩性爱| 韩三级a视频在线观看| 999热这里只有精品| 69丨亚洲丨精品丨入口免费播放| 亚洲精品天天影视综合网| 长长久久免费视频| 精品少妇一区二区三区在线视频 | 亚洲在线a| 97久久超碰日韩精品| 蜜臀亚洲综合一二三四区| 欧美亚洲丝袜美女电影| 九九久久久久久爱| 久久久久久久久久久97| AV天天综合| 久久一二三四五六七八九区区区| 丁香婷婷久久| 激情一区二区三区在线观看| 青青草影视蜜久久| 国产9熟妇视频网站| 久久视频,这里只有精品| 久偷拍欧美日韩三区| 久久精9| 欧美A√综合网| 亚洲黄日韩无码专区| 91 国产丝袜在线放观看| 色99在线| 成 人 影视 一区 二区 三区 四区| 婷婷久久五月天| 色婷婷六月| 五月丁香啪| 久都青青视频| 国产精品熟女九九九| 91性高| 偷偷人人精品女女久久| 九九热av| 无码操逼视频一下| 天天激情干| 中文日本免费高清| 人妻精品视频一区二区| 久久思思热| 强上我不卡卡| 亚洲精品1区| 伊人96在线| 欧美性爱一区二区三区| 午夜在线播放| 家庭乱伦国产精品| 乱伦图一区| 国产免费一区在线观看| 91美女中出| 亚洲综合码| www. 男人天堂成人在线| 欧美96交| 日韩熟女操逼| 亚洲高清无码在线桃色| 情侣开房子拍 日韩无码 女的很漂亮| 亚洲丝袜色图| 热久久无毒不卡| henhen91| 岛国视频一二三区| 久操大香蕉手机视频在线看 | 欧美日韩国内不卡| 亚洲国产一区二区三区在线 | 一区二区三区日韩欧美 | 亚洲美欧999| 2003天天干夜夜操| 91精品国产91久久青草| 久久久久久国产无码精品| 中文字幕jul-617人妻熟女| 欧美中文字幕男人天堂久久精品| 亚洲伊人久久精品影院| 大香蕉中文| 大香蕉一线视频| 日本熟妇熟色97一本在线观看| 久久动漫精品视频这里只有精品| 久久这里只精品| 国产亚洲性生活视频播放| 狠狠综合网| 久久久∴| 大学生美女口爆| 天天躁日日躁XXXXYY| 在线 亚洲 网爆 自拍| 久久久999国产精品| 成人免费看吃奶视频网站| 志村玲子视频一区二区| 久久久久久无码人妻中文字幕| 亚洲春色一区二区三区| 免费观看欧美日韩操逼视频| 综合激情一一91| 美女裸体无遮挡永久免费观看网站 | 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 欧中美三级一区二区三区| 免费自拍三级综合| 天天操天天射青青草| 人妻少妇精品无码专区二区密桃| 国产极品粉嫩馒头一线天av| 亚洲激情网一二三四区| 青青草原av| 91操人| 在线观看午夜婷婷久久久久清性观看| 岛国免费视频在线| 欧美.亚洲.另类.丝袜.制服.诱惑| 无码人妻丰满熟妇区毛片| 国产精品盗摄 偷窥盗摄| 九九无码久久精品视频| 欧美性夜| 久久,精品一二三| 亚洲欧美内射| 青娱乐日韩无码| 精品乱码在线观看| 3P乱轮视频| 亚洲 另类 丝袜 自拍 动漫| 午夜.DJ高清在线观看免费7| 97超碰色屌| 国产亚洲深夜激情| 亚洲色欲一区二区三区| 久久性爱视频免费看| 欧美性猛交美女自慰91| 百度百度日本操逼| 日本精品人妻少妇一区二区| 亚洲影院成人| 天堂资源欧美| 少妇一级婬片免费放一级a性色.| 欧美色日本| 3d成人精品一区二区| 综合欧美日韩在线| 1024人妻熟女一区二区三区| 热热色综合网| 99精品在线观看| 91精片| 九九热超碰97亚洲最新香蕉 | 成人无码在线视频网站| 欧美国产成人在线| aaaa黄片| 丰满人妻一区二区三区| 久久伊人在线五区| 岛国片在线播放| 长久操视频| 亚洲欧美激情在线视频| 欧美91变态| 91天美传媒精品| 亚洲第2页| 色臀AV| 91jk色拍| 女人双腿搬开让男人桶| 偷拍视频青青草在线视频| 丝袜狠狠草尤物人妻av91| 日韩欧美成人午夜福利| 亚洲女优有码无码高清| 91人妻超碰| 国产av又色又爽又黄| 999热日韩精品| 久久嫩草国产成人一区| 久操视频资源站公开| 中国和日本人色哪个不下载能放| 宅男午夜在线视频| 福利在线黄片| 手机午夜电影神马久久| 蜜臀网址在线| 欧美白嫩在线放| 噜噜噜无码AV一级一级久久影院| 成人精品在线免费视频| 懂色av中文字幕| 1024亚洲中文字幕久在线看片你懂的 | 日韩操逼HD| 欧美se综合| 欧色性第一页| 欧洲综合视频| 天天精品| 超碰色男人操熟女| 91 丝袜在线播放| 男人天堂免费| 大香蕉天天看妹子| 五月丁香啪啪网| 精品人妻一区二区视频| 999综合网| 男人天堂久久精品不卡| 亚洲免费日韩在线一区二区| 狠狠操狠狠插| 亚洲精品亚洲人成在线麻豆| 日本熟女不卡视频| 啊啊啊啊操死我| 97精品97久久| 青青草视频在线观看一区二区| 性爱乱伦网址| av绯色| 国产高清成人免费视频| 欧美,日韩,中文,另类| 人人爽夜夜操| 91亚洲黑人| 日本在线视频导航| 91色狼| 欧美成人精品一区| 99热国产精品| 精品久久九| 欧美熟妇精品黑人巨大一二三区| 99热精品在线观看| 亚洲精品aa久久伊人| 国产男女边吃边摸视频网站| 亚州色综合| 三级片大波波| 人妻色偷色噜| 精品人妻一区二区三区不卡断 | 96久久科窝| 欧美顶级黄色大片免费| 国产AV超爽| 91中文精品日韩欧美在线| 精品国产片亚洲一区| 久久9免费视频| 成人性爱免费播放| 日本高清熟女久久一区| 欧美日韩中文亚洲v在线综合| 乱伦一二三区| 欧美第一页| 97色色国产视频| 成人网站 免费观看| 成人小说视频在线精品欧美| 人妻人久久精品中文字幕| 老熟妇一区二区三区啪啪| 免费超碰97久久| 国产久久av| 九九热三级片| 国产日韩中文字幕欧美| 操逼短片| 999国产精品999久久久久久| 九9热伊人| 亚洲精品性爱片| 亚洲成人激情小说视频| …亚洲黄色厕厕女女在线播…| 亚洲深夜福利| 干B网| 亚洲天天更新| 偷拍 亚洲 欧美| 99热欧美| 亚洲一区二区av| 成人国产二区三区在线,男女精品。| 大香蕉狠狠爱| 国产久久久久久| 日韩成人私密一级精品av| 日本久久女同性恋视频| 国产强奸乱伦xd| 欧美精品日韩久久久九| 5278欧美一区二区三区| 成人性爱电影一区二区| 亚洲国男人的天堂| 日韩情色视频| 99精品丰满人妻| 日本不卡一区二区三区| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 92性色国产午夜福利在线661| 高清在线不卡一区二区 视频| 日本日逼高清| 国产 日韩 另类 视频一区爱| 日本九九九九| 99热97| 精品久久久九九九孕妇| 日本淫穴在线| 日本97久久| 家庭乱伦麻豆| 99久久e免费热视| 色色色欧美| www鬼畜国产男人的天堂| 干B| 少妇大屁屁| 精品无码一区二区三区| 久久久久亚洲Aⅴ无码| 人人操AV| 伊人国产视频| 麻豆精品.欧美精品.日韩精品.| 日本国产欧美一区三区二区| 亚洲中文日韩精品| 好吊色在线观看| 丰满人妻一区| 91爱| 狠狠色噜噜狠狠狠狠狠色综合久久 | 九九精品无码专区免费| 亚洲av影院在线观看| 日韩99999色| 中出人妻中文字幕91在线| 国产真实子伦对白| 97国产高清视频在线观看| 美女露胸露奶头| 大香蕉色欲AV| www.色吧5.com| 日本精品成人无码| 2000亚洲男人天堂| 清纯唯美亚洲综合| 日本道久久综合色色| 丝袜性亚洲| 欧在线一二区| 1769精品一区二区三区| 色天堂综合| 久热一区二区| www.狠狠| 91男同| 黄色激情电影在线观看| 玖玖视频在线资源一区二区三区| 久久精品日韩专区免费观看| 秋霞免费无码视频日韩A片| 婷婷五月在线视频| 国产热av| 国产精品蜜乳AV| 国产美女91视频| 国产 日韩 欧美一区| 亚洲日韩精品在线播放| 九九综合网| 手机看片日韩人妻| 久久熟妇五十路一区| 日韩小电影| 亚洲天堂电影精品一区| 日韩电影免费网站麻豆视频| 在线综合色| A啊啊在线观看| 久久国产熟女影院| 日本免费不卡二区| 久久精品一区二区一8| 亚洲精品男人的天堂| 日韩本不卡视频在线观看| 无码高清专| 97超碰欧美手机在线| 久久一区二区高清免费| 97精品国产手机| 岛国A V在线免费看| 久久视网78| 很很操在线| 蜜桃视频一区二区三区在线观看| 女人精品内射国产99| 中文字幕 av v| 中文一区二区三区影院| 亚州操操穴网| yw尤物av无码点击进入麻豆| 精品人妻一区二区免费蜜桃| 在线视频免费观看午夜| 色盈盈影院| 国产男女边吃边摸视频网站| 清清草影| 综合欧美激情网| 一区超碰一区| 欧美婷婷| 午夜舔阴达高潮视频免费看| 欧美亚洲国产自久久| 欧美日韩另类在线播放| oumeisetupian| 大黄片做爱的大的| 呻吟 欧美 日本 中出| 亚洲精品日日夜夜52| 野狼福利社区| 99久久无色码| 国产人妖视频一区在线观看| 九九九九97| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | av九九| 东北熟女91| 欧美精品久久96人妻无码| 亚洲国产欧美另类自拍| 亚洲中文字幕av | 五月激情综合网| 麻豆天美传媒毛片| 东京热熟女亚洲视频网站| 一区二区三区激情在线观看| 亚洲激情综合另类| 久久久久ab| 日本熟女中文| 女欧美一区二三区| 91男人天堂网| 好淫网一二三视区| 日韩乱伦影音先锋| 久草在线| 久久久99999久网站| 天天干,夜夜爽| 精品国模无码| 99热线麻豆| 久操99| 在线视频日韩欧美国产| 国产1024在线播放| 九七人妻在线| 日韩少妇丰满亚洲| 天堂8在线新版官网| 日本中文熟女视频| 日韩专区久久久| 欧美18禁91| 久久这里只精品99re66图| 日韩av电影成人在线| 国产熟女自拍| 91性高| 欧美熟女少妇| 大地资源在线观看中文第二页| 性色av大全| 91热| 99最新日韩偷拍视频| 久久久99久9| 九热视频| 玖玖爱免费观看视频| 欧美AAAA黄片| 亚洲图片 欧美电影| 少妇内射www在线观看视频| 国产一区二区三区中文字幕| 色色色色电影网| 亚洲系列第一页| 97超碰色| 男人的天堂一区| 亚洲国产亚洲天堂| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 天天综合网合集91| 成人一区二区三区四区| 国产大片精久久久久久| 久久久A∨| 91性高潮久久久久久久久| 久久国产乱子伦精品免费女人| 国产中出内射一区二区| 无码粉嫩白虎一线天b区| 伊人在线大香蕉视频久久| 五十路熟女工口| 97这里都是精品| 99热成人| 99热精品在线播放| 偷窥自拍亚洲天堂网爆| 一起草日韩| 密乳无码| 中文字幕乱码人妻二区三区| 天天射天天操天天干天天吃2018| 好爽免费视频| 97免费在线观看| 精品午夜福利| 午夜精品久久久久久久久久久久久| 蜜臀久久99精品久久久久电影| 在线情色电影 91大 | 欧美激情亚洲色图| 亚 欧 美 综合| 插入综合网| 黄片不用下载在线观看| 伊人久久综合精品欧美| 国产av强奸美女| 最新中文字幕精品在线| 精品成人亚洲午夜电影| 久操com| 蜜乳AV一区| 欧美黑人精品一区二区| 五十路六十路素人熟女| 国产三级在线现体验区| 26uuu性物| 国产精品制服丝袜清纯唯美 | 国产91 丝袜在线播放 | 色在线69堂| 亚州Av天美传媒| 熟女露脸激情自拍视频| 青青草女人天天干| 日本布卡一区二三区| 天美麻豆一区二区三区| 久久久无码视频| 97精品人妻一二三四| 色吊丝 日日骚 清纯唯美| 91老熟妇| 操www| 欧美黄片视频在线观看免费| 男人天堂2019亚洲| 啊好大好舒服| 国产久久一区二区| 夜夜爽夜夜摸夜夜操免费视频| 麻豆尤物视频网| 天天综合欧美| 91搞逼视频| 爱我干综合| 天美国产三级传媒| 大香蕉综合在线| 日日嗨AV一区二区夜夜| 男人天堂2030| 91精品女厕偷拍视频| 日韩性爱再线视频| 77777亚洲蜜臀精品久久综合蜜臀| 国产熟女一区二区丰满| 青青草导航在线视频| 97啪啪| 欧美黑人精品在线播放| 狠狠操狠狠| 安徽熟妇视频| 99热在线只有精品| 伊人操你| 超碰人人色| 天天舔九色婷婷| 91超碰在线观看| 国产一区二区在线播放量| 淫荡少妇免费| 日韩精品99999| 中文字幕乱偷人妻久久艾草网| 欧美性性性| 色哟哟511老熟女| 欧美日韩91| 欧美偷拍区| 欧洲色色| 国产九区| 夜草网站| 麻豆啪啪啪视频| 开心六月色| 亚洲熟妇A V黑人| 久久精品欧美一区二区三区不卡| 婷婷综合视频| 四虎精品一区| 女人与公拘交酡2020视频| 色色操| #NAME?| 中文字幕高清精品一区| 欧美九9 9 9| 97国产伦理| 国产视频一区二区三区在线免费观看| www.色婷婷色综合| 久久99草| 92性色国产午夜福利在线661| 久久九九网| 中文熟女五十乱码在线| 久久久久久99AV无码免费网站| 久久午夜伦| 精品日日人妻| 久久久久亚洲Aⅴ无码| 亚洲欧洲第二视频在线观看色图| 99在线精品观看视频中文| 日本操嫩b网| 在线一区| 一级做a爰片性色毛片久久| 欧美午夜精品久久久久久超碰| 东京热91| 精品一二三区久久AAA片| av东京热男人的天堂| 亚洲男人综合| 老熟女熟妇| 超碰97人人cao| 九九视品黄色| 欧美中出| 超碰人人超在线观看| 在线五区| 亚洲图片偷拍视频区| 日日妻色网| 日韩,欧美,中文在线| 学生妹天天看| 青娱乐亚洲自拍| 天天日骚逼熟女| 国产精品久久妻无码网站| 伊人午夜福利视频| 日韩欧美大力操| 十八禁黄色成人网站观看| 亚洲色婷婷久久91| 在线女人91| 精品无码一区二区三区| 啊啊啊啊啊在线视频| 综合久久少妇中文字幕| 内射中出日韩在线观看视频| 日韩成人私密一级精品av| 97精品国产97久久久| 天天干人人看综合| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 亚洲天堂男人网| 神马视频久久久久久| 亚洲影院365| 欧美五区| 久久精品国产亚洲AV嘿嘿| 精品无码产区一区二| 久草免费在线一区二区| 清纯唯美第一页| 成人国产精品三级A片| 美女网站91| 十八禁黄色成人网站观看| 欧美探花网| 色九九九九九九| 美女刺激久久国产欧美| 亚洲九九九| 综合天天网| 无码国产精品午夜不卡(| 97人人爱人人乐| 麻豆av一区二区三区| 久草资源在线| 香蕉久久精品| 亚洲天堂99| 美女黄站| 天美传媒在线一区| 日韩无码成人电影| 午夜毛片亚洲精品片国产久久久| 欧美无圣光在线| 婷婷亚洲五月***久久| 91N综合网| 插老姨肥穴| av一区二区三区 中文| 久艹日日日| 日韩综合97P| 欧美.亚洲.另类.丝袜.制服.诱惑| 牛牛AV人人夜夜澡人人爽| 91欧美性| 亚洲国产日韩欧美熟妇在线| 久久精品国产亚洲AV先锋| jiujiujiujingpin| 免费A V在线| 级做a爱无码性色永久免费| 黑人综合色| 炮色五月| 99碰碰| 国产又色又粗又黄又爽| 后入式999| 9 7超碰在线免费观看| 精品人人插人人操| 日语五十路和六十路亚洲国产精品| 97久久国产亚洲精品超碰热| 高凊专区人人操| 欧日a| 在线播放免费av福利片| 91熟女在线| 国产久久久久影院老熟女| WWW4虎| 91chinese在线| 高清一区AV无码| 极品国产内射| 91天美免费| 日日夜夜噜| 亚洲人在线| 调教熟妇 久久久久久| 无码黑人精品一区二区三区三| 呦呦一区| 怡春院久久| 99re在线精品78| 天天做天天爱天天爽AV| 日韩国语字幕| 婷婷五月天激情网| 操逼天美3区| 9色国产精品一区粉嫩| 亚洲色天堂九9| 欧美玖玖爱免费玖玖| 性色国产东北露脸精品视频| 久青草影院| 99久久婷婷国产综合| 亚洲成人久久一区二区| 无码动漫av中文字幕| 蜜臀视频网站| 欧美色另类| 日韩特一级久久| 色踪合AV| 欧美第二页午夜| 99操| 最新精品久久蜜桃| 日少妇亚洲版| 亚洲 综合 欧美| 蜜臀国产AV中文字幕| 超碰在线99| 飘花国产午夜精品不卡| 午夜福利一区二区影院| 国产精品日本无码A片| 人人搞人人插人人操| 东京热毛片177b2viP| 亚洲欧美在线丝袜| 啊啊啊爽爽| 夜夜欧美| 欧美色狠| 日韩精品中文字幕人妻| 麻豆精品一区二区三区四区免费观看| 亚洲女人91| 亚洲图片欧美色| 久9无限国产| 国产午夜精品理论片a大结局| 青娱乐国产剧情av一区| 欧洲视频在线| 少妇久久久久| 天天视频黄| 97在线精品观看视频| 亚洲精品乱码线路中文字幕| 午夜视频好爽啊| 日韩精品黄片免费观看| 黄片免费久久久久久久| 在线观看精品国产免费| AAA久久| www.色婷婷| 宅男午夜在线视频| 97天天弄| 欧美手机在线综合| 一本色道久久综合亚洲二区三区| 自偷自拍的亚洲视频| 午夜毛片高清免费不卡| 天天摸天天插天天日| 亚洲影院小综合| 骚女高跟AV在线| 亚州,欧美在线| 成人一二三区| 秋霞午夜成人福利片片| 乱伦一二三区| 久久成人午夜精品影院 | 黑人娇小av在线播放 | 亚洲人妻色图| 91肉丝| 国产一级137片内射麻豆| 欧美A片中文字幕| 国产精品自拍欧美在线| 激情综合五月天| 亚洲成人av色网| 日韩 人妻 精品| 久久久久久久久国产| 加勒比海人人操超碰在线| 色图综合网| 欧美日韩国产中文精品字幕自在自线 | 人人妻人人操人人乐| 夜夜骑天天燥|