静态网站制作流程,网站设计常用字体,服务器网站崩溃,百度地图平面图怎么下载前言#xff1a;Agent 具备自主性、环境感知能力和决策执行能力#xff0c;能够根据环境的变化自动调整行为#xff0c;以实现特定的目标。
一、Agent 的原理
Agent(智能体)被提出时#xff0c;具有四大能力 感知、分析、决策和执行。是一种能够在特定环境中自主行动、感…前言Agent 具备自主性、环境感知能力和决策执行能力能够根据环境的变化自动调整行为以实现特定的目标。
一、Agent 的原理
Agent(智能体)被提出时具有四大能力 感知、分析、决策和执行。是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。它们具备自主性、反应性、社交性和适应性等特点能够根据环境的变化调整自己的行为以达到预设的目标。基于大模型构建的Agent主要利用LLM进行进行语义理解和推理分析结合任务分析能力通过外部工具Tool。利用RAG构建知识库来创建Memory。 1、Planning
类比人脑通过对任务的拆解分解为多个小任务通过构思方案分步骤操作得到最终的答案即可终止。如ReAct、CoT思维链。
2、Memory
模拟大脑的记忆功能分为长期记忆和短期记忆。长期记忆为用户行为特征、外部知识库等短期记忆为多轮对话形式存储上下文任务结束即可清理。
3、Tools
工具顾名思义通过外部构建的工具辅助完成决策。如代码分析网页读取天气查询等。
4、Action
通过对Planning、Memory、Tools三者的调用完成对用户输入的回答。如智能查询天气预报智能机器人抓取物体等。
二、具体案例天气查询
1. Planning规划
目标明确任务需求制定查询计划。 用户输入用户提出天气查询需求例如“今天北京的天气怎么样”。 任务拆解 确定查询地点北京、时间今天。 检查是否需要更详细的参数如温度单位、是否需要降水概率等。 输出生成一个结构化查询意图例如
{action: weather_query,location: 北京,date: 今天,params: [temperature, weather_condition]
}
2. Memory记忆
目标利用历史数据或上下文优化查询。 短期记忆检查对话历史中是否已有相关信息例如用户之前提过“北京”或“今天”。 例若用户刚问过“上海天气”可确认是否需对比两地天气。 长期记忆检索用户偏好如用户曾设置温度单位为“摄氏度”。 输出补充查询参数例如
{unit: celsius,user_preference: show_humidity
}
3. Tools工具
目标选择并调用合适的天气查询工具。 工具匹配识别可用工具如 WeatherAPI、OpenWeatherMap 等。 工具参数将规划阶段的意图转化为工具所需的输入格式。 例调用 WeatherAPI 的请求参数
weather_tool.query(location北京, date2023-11-20, unitcelsius) 异常处理准备备用工具或提示用户补充信息如地点模糊时询问“您指的是北京市朝阳区吗”。
4. Action执行
目标执行工具并返回用户可理解的结果。 调用工具发送请求至天气 API获取原始数据。 示例 API 返回
{location: 北京,date: 2023-11-20,temperature: 15,condition: 晴,humidity: 40%
} 结果格式化将数据转换为自然语言响应。 最终输出 “今天北京天气晴朗气温 15 摄氏度湿度 40%。” 错误处理如查询失败反馈原因如“网络错误”或“地点不存在”
完整流程示例 用户输入“今天北京湿度怎么样” Planning解析出 actionweather_query, location北京, date今天, params[humidity]。 Memory发现用户偏好“显示百分比”。 Tools调用 OpenWeatherMap 的湿度查询接口。 Action返回“今天北京湿度为 40%”。
三、具体实现
具体构建思路如下
SimpleAgent/
├── SimpleAgent.py # 主代理类入口
├── llm/ # 语言模型模块
│ ├── __init__.py # 初始化文件
│ └── base_model.py # 抽象模型基类
├── memory/ # 记忆管理模块
│ ├── __init__.py
│ └── memory.py # 长短期记忆类
├── rag/ # 检索增强生成模块
│ ├── __init__.py
│ └── rag.py # RAG检索生成模块
├── tool/ # 工具模块
│ ├── __init__.py
│ ├── calculator.py # 计算器工具
│ ├── weather.py # 天气查询工具
│ └── base_tool.py # 工具基类
└── callback/ # 回调处理模块├── __init__.py└── event_handler.py # 事件处理回调
llm /base_model.py 主要调用大模型作为核心。用来回答基本问题
memory/memory.py 主要用来保存对话数据主要做简单的多轮对话
rag/rag.py 主要用来实现检索功能来使用本地知识库使用langchain框架加载向量数据库Faiss
tool/ 定义了工具基类通过工具基类实现了calculator和weather 两个工具。
主要解析SimpleAgent:
1、如何利用大模型理解用户意图 提示工程(Prompt Engineering)、语义相似度分析、意图分类技术、多轮对话管理 推荐使用提示词工程
请分析用户意图并选择操作。可用工具{tools_list}用户输入{prompt}请返回严格的JSON格式{{tool: 工具名 | null,action: use | direct_response,params: 参数 | null,}}
tool_list包含工具名和工具描述如果用户的需求工具可以实现则通过工具调用反之则用LLM直接回答。
print(agent.available_tools)
# 输出: {calculator: 数学计算器工具..., weather: 天气查询工具...}
2、如何定义工具和调用
2.1定义工具前需要设置一个工具基类。
class Tool(ABC):工具基类def __init__(self):self._is_core False # 是否为核心工具propertyabstractmethoddef name(self) - str:工具名称passabstractmethoddef use(self, params: Dict[str, Any]) - Any:工具主逻辑Args:params: 参数字典Returns:执行结果pass
2.2定义一个天气查询Tool
import requests
from typing import Dict, Anyclass Weather(Tool):天气查询工具获取指定城市的天气信息propertydef name(self) - str:return weatherdef use(self, params: Dict[str, Any]) - Dict:city params.get(city, 北京)# 实际调用天气APIresponse requests.get(fhttps://api.weather.com/{city})return response.json() 2.3 工具的调用
直接调用
result agent.tool_use(tool_nameweather,params{expression: 北京}
)
通过LLM自动调度用户自然语言输入 → Agent自动选择工具 → 返回结果
response agent.llm_tool_dispatcher(查询北京的天气)
2.4 工具调用详解
通过使用_llm_analyze_intent()生成如下的意图结构化决策
{tool: cweather,action: use,params: {expression: 北京}
}
通过tool_use()方法调用得到反馈结果。将反馈结果推送大模型转换为自然语言进行回复。
2.5 工具的添加
根据自己设置的base_tool来定义对应的工具记得添加工具描述然后在Agent中注册该工具
3、如何设置本地知识库基于langchain
3.1 文本文档的处理
from langchain.document_loaders import (PyPDFLoader,Docx2txtLoader,UnstructuredFileLoader
)class DocumentLoader:支持多种格式的文档加载器staticmethoddef load(file_path: str):if file_path.endswith(.pdf):loader PyPDFLoader(file_path)elif file_path.endswith(.docx):loader Docx2txtLoader(file_path)else: # txt/html等loader UnstructuredFileLoader(file_path)return loader.load()
3.2. 向量数据库配置
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISSclass VectorDB:基于FAISS的本地向量数据库def __init__(self):self.embeddings HuggingFaceEmbeddings(model_nameGanymedeNil/text2vec-large-chinese)def create_index(self, docs, save_pathvector_db):db FAISS.from_documents(docs, self.embeddings)db.save_local(save_path)return dbdef load_index(self, path):return FAISS.load_local(path, self.embeddings) 3.3完整RAG实现
class LocalKnowledgeBase:def __init__(self):self.vectordb VectorDB()self.retriever Nonedef build_knowledge_base(self, file_paths: list):构建知识库all_docs []for path in file_paths:docs DocumentLoader.load(path)all_docs.extend(docs)self.vectordb.create_index(all_docs)print(知识库构建完成)def load_existing_knowledge(self, db_path):加载已有知识库self.retriever self.vectordb.load_index(db_path)def query(self, question: str, top_k3) - list:检索知识if not self.retriever:raise ValueError(请先加载知识库)docs self.retriever.similarity_search(question, ktop_k)return [doc.page_content for doc in docs]
3.4 与Agent的交互
class EnhancedAgent(SimpleAgent):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.knowledge_base LocalKnowledgeBase()def rag_response(self, query: str) - str:增强的RAG响应# 1. 检索相关知识contexts self.knowledge_base.query(query)# 2. 构造增强提示prompt f基于以下上下文回答问题{contexts}问题{query}答案# 3. 生成最终回复return self.generate_response(prompt)
3.5 RAG 使用技巧
1、使用缓存或者保存为本地向量库方便以后的查询
agent EnhancedAgent(SmartBot)# 首次构建耗时操作
agent.knowledge_base.build_knowledge_base([data/产品手册.pdf,data/常见问题.docx
])
# 后续使用直接加载
agent.knowledge_base.load_existing_knowledge(vector_db)
from diskcache import Cachecache Cache(query_cache)cache.memoize(expire3600)
def cached_query(question):return self.knowledge_base.query(question)
2、采用混合查询策略
def hybrid_search(query):# 语义检索semantic_results self.retriever.similarity_search(query)# 关键词检索keyword_results self.retriever.search(query, search_typemmr)return combine_results(semantic_results, keyword_results)
3、关于知识库的更新
def update_knowledge(file_path):new_docs load_documents(file_path)self.retriever.add_documents(new_docs)self.retriever.save(vector_db)
四、总结
基于大语言模型(LLM)的智能代理(Agent)实现具有工具使用、记忆和检索增强生成(RAG)能力。
核心组件 语言模型(LanguageModel)基础的大模型接口 记忆系统(Memory)存储对话历史 工具系统(Tool)可扩展的工具框架 回调系统(CallbackHandler)事件处理机制 RAG系统检索增强生成功能
主要功能解析
1. 初始化与基础功能 __init__ 初始化代理名称、语言模型、记忆、回调和工具系统 greet 简单的问候功能 generate_response 基础文本生成功能
2. 工具系统 _init_tools 初始化默认工具(计算器和天气查询) register_tool/unregister_tool 工具的动态注册与卸载 tool_use 安全执行工具调用带超时控制和错误处理 available_tools 获取可用工具清单
3. 意图理解与调度 _llm_analyze_intent 核心意图理解方法 构造包含可用工具信息的提示词 要求LLM返回结构化JSON响应 使用正则表达式提取JSON结果 验证结果结构有效性 llm_tool_dispatcher 主调度方法 如果有文件路径使用RAG处理 否则分析用户意图 根据意图决定使用工具或直接响应 格式化工具结果为自然语言
4. RAG功能 rag 方法实现检索增强生成 加载文档 检索相关信息 生成回答
5. 辅助功能 日志记录 错误处理 回调系统(用于监控和扩展) 结果格式化 完整代码https://github.com/rescal-xuan/SimpleAgent