大模型智能体实战:从LLM基础到RAG与Agent系统开发

发布时间:2026/7/13 8:08:46
大模型智能体实战:从LLM基础到RAG与Agent系统开发 随着大模型技术的快速发展越来越多开发者希望系统掌握LLM、RAG和智能体等核心技术。上海交大推出的动手学大模型教程为初学者提供了完整的学习路径本文将基于该教程体系结合最新技术发展为零基础开发者构建一套实用的大模型智能体实战指南。1. 大模型技术基础概念解析1.1 大型语言模型LLM核心原理大型语言模型是当前人工智能领域的核心技术基础。LLM基于Transformer架构通过自注意力机制处理序列数据具备强大的语言理解和生成能力。以GPT系列为例模型通过海量文本数据预训练学习语言的统计规律和语义关系。Transformer架构的核心优势在于其并行计算能力和长距离依赖捕捉能力。自注意力机制允许模型在处理每个词时同时关注输入序列中的所有词这种全局视角使得模型能够更好地理解上下文语义关系。在实际应用中LLM可以完成文本生成、翻译、问答、代码编写等多种任务。1.2 检索增强生成RAG技术架构RAG技术解决了大模型在处理专业知识、实时信息时的局限性。其核心思想是在生成答案前先从知识库中检索相关信息作为上下文。RAG系统通常包含三个主要组件检索器、知识库和生成器。检索器负责将用户查询与知识库中的文档进行相似度匹配通常使用向量数据库实现高效的相似性搜索。知识库存储结构化的领域知识可以是文档、数据库记录或其他形式的数据。生成器则基于检索到的信息和原始查询生成准确、相关的回答。1.3 智能体Agent系统设计智能体是能够自主执行任务、作出决策的AI系统。一个完整的智能体通常包含感知模块、决策模块和执行模块。感知模块负责接收环境信息决策模块基于LLM进行推理规划执行模块调用工具完成任务。智能体的核心能力体现在其任务分解和工具使用上。通过先计划再求解的策略智能体能够将复杂任务拆解为可执行的子任务逐步完成目标。这种能力使得智能体在客服系统、自动化流程、决策支持等场景中具有重要价值。2. 环境准备与工具配置2.1 基础开发环境搭建开始大模型开发前需要准备合适的开发环境。推荐使用Python 3.8及以上版本这是大多数AI框架和库支持的最佳版本。同时需要安装必要的深度学习框架如PyTorch或TensorFlow。# 创建虚拟环境 python -m venv llm-env source llm-env/bin/activate # Linux/Mac # llm-env\Scripts\activate # Windows # 安装核心依赖 pip install torch torchvision torchaudio pip install transformers datasets accelerate pip install langchain chromadb openai2.2 向量数据库配置向量数据库是RAG系统的核心组件。ChromaDB作为轻量级的开源向量数据库非常适合初学者使用。安装配置过程简单支持本地部署和持久化存储。import chromadb # 创建持久化客户端 chroma_client chromadb.PersistentClient(path./chroma_data) # 创建集合类似数据库表 collection chroma_client.create_collection( nameknowledge_base, metadata{description: 领域知识库} ) print(向量数据库初始化完成)2.3 大模型API配置对于初学者建议从OpenAI API开始逐步过渡到开源模型。配置API密钥并测试连接import openai from openai import OpenAI client OpenAI(api_keyyour-api-key) # 测试API连接 def test_api_connection(): try: response client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: Hello}], max_tokens10 ) print(API连接成功) return True except Exception as e: print(fAPI连接失败: {e}) return False3. LLM基础应用实战3.1 文本生成与对话系统基于GPT模型构建简单的对话系统了解基本的prompt工程技巧class SimpleChatbot: def __init__(self, modelgpt-3.5-turbo): self.model model self.conversation_history [] def add_system_prompt(self, prompt): 添加系统提示词 self.conversation_history.append({ role: system, content: prompt }) def chat(self, user_input): 处理用户输入 self.conversation_history.append({ role: user, content: user_input }) response client.chat.completions.create( modelself.model, messagesself.conversation_history, temperature0.7, max_tokens500 ) assistant_reply response.choices[0].message.content self.conversation_history.append({ role: assistant, content: assistant_reply }) return assistant_reply # 使用示例 bot SimpleChatbot() bot.add_system_prompt(你是一个有帮助的AI助手回答要简洁准确) response bot.chat(请解释什么是机器学习) print(response)3.2 代码生成与调试LLM在代码生成方面表现出色以下示例展示如何生成Python函数def generate_code(function_description): 根据描述生成Python代码 prompt f 请根据以下描述生成Python代码 {function_description} 要求 1. 包含完整的函数定义 2. 添加必要的注释 3. 包含简单的使用示例 response client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: prompt}], temperature0.3 # 较低温度保证代码稳定性 ) return response.choices[0].message.content # 测试代码生成 description 编写一个函数计算斐波那契数列的第n项 generated_code generate_code(description) print(generated_code)4. RAG系统构建实战4.1 知识库构建与文档处理构建RAG系统的第一步是创建知识库。需要将文档进行分块、向量化处理from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import TextLoader import os class KnowledgeBaseBuilder: def __init__(self, chunk_size500, chunk_overlap50): self.text_splitter RecursiveCharacterTextSplitter( chunk_sizechunk_size, chunk_overlapchunk_overlap ) def load_documents(self, file_path): 加载文档并进行分块处理 loader TextLoader(file_path) documents loader.load() # 文档分块 chunks self.text_splitter.split_documents(documents) return chunks def create_embeddings(self, texts, model_nametext-embedding-ada-002): 为文本创建嵌入向量 embeddings [] for text in texts: response client.embeddings.create( inputtext, modelmodel_name ) embeddings.append(response.data[0].embedding) return embeddings # 使用示例 builder KnowledgeBaseBuilder() documents builder.load_documents(knowledge.txt) print(f文档分块数量: {len(documents)})4.2 向量检索系统实现实现基于向量相似度的检索系统class VectorRetriever: def __init__(self, collection): self.collection collection def add_documents(self, documents, metadatasNone): 向知识库添加文档 texts [doc.page_content for doc in documents] if metadatas is None: metadatas [{} for _ in documents] # 生成文档ID ids [fdoc_{i} for i in range(len(texts))] self.collection.add( documentstexts, metadatasmetadatas, idsids ) def search(self, query, n_results3): 检索相关文档 results self.collection.query( query_texts[query], n_resultsn_results ) return results # 完整RAG系统集成 class RAGSystem: def __init__(self, collection, llm_modelgpt-3.5-turbo): self.retriever VectorRetriever(collection) self.llm_model llm_model def query(self, question, context_count3): 基于检索的问答 # 检索相关文档 results self.retriever.search(question, context_count) context \n.join(results[documents][0]) # 构建增强的prompt prompt f基于以下上下文信息回答问题 上下文 {context} 问题{question} 要求如果上下文不足以回答问题请明确说明。 response client.chat.completions.create( modelself.llm_model, messages[{role: user, content: prompt}] ) return response.choices[0].message.content5. 智能体开发进阶5.1 基础智能体架构设计使用LangChain框架构建智能体系统from langchain.agents import AgentType, initialize_agent, load_tools from langchain.llms import OpenAI import os class BasicAgent: def __init__(self, toolsNone): self.llm OpenAI(temperature0) if tools is None: self.tools load_tools([serpapi, llm-math], llmself.llm) else: self.tools tools self.agent initialize_agent( self.tools, self.llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue ) def run(self, task): 执行任务 try: result self.agent.run(task) return result except Exception as e: return f任务执行失败: {e} # 智能体使用示例 agent BasicAgent() result agent.run(查询北京今天的天气并计算摄氏温度转换为华氏温度) print(result)5.2 自定义工具开发为智能体开发专用工具扩展其能力from langchain.tools import BaseTool from typing import Type class CalculatorTool(BaseTool): name Calculator description 用于执行数学计算 def _run(self, expression: str) - str: 执行数学计算 try: # 简单的安全计算实现 allowed_chars set(0123456789-*/.() ) if not all(c in allowed_chars for c in expression): return 表达式包含不安全字符 result eval(expression) return f计算结果: {result} except Exception as e: return f计算错误: {e} def _arun(self, expression: str): raise NotImplementedError(异步执行不支持) class FileReaderTool(BaseTool): name FileReader description 读取文本文件内容 def _run(self, file_path: str) - str: 读取文件内容 try: with open(file_path, r, encodingutf-8) as f: content f.read() return content except Exception as e: return f文件读取失败: {e} # 集成自定义工具的智能体 custom_tools [CalculatorTool(), FileReaderTool()] advanced_agent BasicAgent(toolscustom_tools)6. 完整项目实战智能研究助手6.1 项目需求分析构建一个智能研究助手能够自动收集资料、分析信息、生成报告。主要功能包括多源信息检索网络搜索、本地文档信息摘要和关键点提取结构化报告生成参考资料管理6.2 系统架构设计class ResearchAssistant: def __init__(self): self.llm OpenAI(temperature0.7) self.search_tool load_tools([serpapi])[0] self.writer_tool self.setup_writer_tool() self.agent initialize_agent( [self.search_tool, self.writer_tool], self.llm, agentAgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verboseTrue ) def setup_writer_tool(self): 设置报告写作工具 from langchain.tools import BaseTool class ReportWriter(BaseTool): name ReportWriter description 根据研究内容撰写结构化报告 def _run(self, research_content: str) - str: prompt f 根据以下研究内容撰写一份结构化报告 研究内容 {research_content} 报告格式要求 1. 概述 2. 关键发现 3. 分析讨论 4. 结论建议 5. 参考资料 response self.llm(prompt) return response return ReportWriter() def conduct_research(self, topic, depthstandard): 执行研究任务 research_plan f 对主题{topic}进行深入研究要求 1. 收集最新相关信息 2. 分析不同观点 3. 总结关键发现 4. 生成完整报告 研究深度{depth} return self.agent.run(research_plan) # 使用示例 assistant ResearchAssistant() report assistant.conduct_research(人工智能在医疗领域的应用) print(report)6.3 结果优化与评估对生成结果进行质量评估和优化class QualityEvaluator: def __init__(self): self.llm OpenAI(temperature0.3) def evaluate_report(self, report, criteria): 评估报告质量 prompt f 根据以下标准评估报告质量 评估标准{criteria} 报告内容 {report} 请给出 1. 整体评分1-10分 2. 优点分析 3. 改进建议 evaluation self.llm(prompt) return evaluation def optimize_content(self, original_content, feedback): 基于反馈优化内容 optimization_prompt f 原始内容 {original_content} 优化建议 {feedback} 请根据建议优化内容保持核心信息不变。 optimized self.llm(optimization_prompt) return optimized # 质量评估流程 evaluator QualityEvaluator() criteria 准确性、完整性、逻辑性、可读性 evaluation evaluator.evaluate_report(report, criteria) print(质量评估结果:, evaluation)7. 常见问题与解决方案7.1 API调用问题排查问题现象可能原因解决方案请求超时网络连接问题检查网络连接增加超时时间认证失败API密钥错误验证API密钥有效性额度不足超出使用限制检查使用量升级套餐频率限制请求过于频繁实现请求间隔控制import time from tenacity import retry, stop_after_attempt, wait_exponential class RobustAPIClient: def __init__(self, api_key, max_retries3): self.client OpenAI(api_keyapi_key) self.max_retries max_retries retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def safe_completion_create(self, **kwargs): 带重试机制的API调用 try: response self.client.chat.completions.create(**kwargs) return response except Exception as e: print(fAPI调用失败: {e}) time.sleep(2) # 失败后等待 raise e7.2 向量检索优化策略提高检索准确性的实用技巧class RetrievalOptimizer: def __init__(self, collection): self.collection collection def hybrid_search(self, query, text_weight0.7, vector_weight0.3): 混合检索策略 # 文本检索关键词匹配 text_results self.collection.query( query_texts[query], n_results5 ) # 向量检索语义匹配 vector_results self.collection.query( query_embeddings[self.get_embedding(query)], n_results5 ) # 结果融合 combined_results self.merge_results( text_results, vector_results, text_weight, vector_weight ) return combined_results def get_embedding(self, text): 获取文本嵌入向量 response client.embeddings.create( inputtext, modeltext-embedding-ada-002 ) return response.data[0].embedding def merge_results(self, text_results, vector_results, text_weight, vector_weight): 融合两种检索方式的结果 # 实现结果排序和去重逻辑 merged [] # ... 具体实现细节 return merged8. 性能优化与最佳实践8.1 响应速度优化大模型应用的性能优化策略import asyncio from concurrent.futures import ThreadPoolExecutor class OptimizedAgent: def __init__(self, max_workers5): self.executor ThreadPoolExecutor(max_workersmax_workers) async def parallel_processing(self, tasks): 并行处理多个任务 loop asyncio.get_event_loop() futures [ loop.run_in_executor(self.executor, self.process_single_task, task) for task in tasks ] results await asyncio.gather(*futures) return results def process_single_task(self, task): 处理单个任务 # 具体的任务处理逻辑 pass def cache_embeddings(self, texts): 缓存嵌入向量减少重复计算 cache {} for text in texts: if text not in cache: cache[text] self.get_embedding(text) return cache8.2 成本控制策略有效控制API调用成本的实用方法class CostController: def __init__(self, monthly_budget100): self.monthly_budget monthly_budget self.usage_tracker {} def track_usage(self, model, tokens_used): 跟踪使用量 current_date datetime.now().strftime(%Y-%m) if current_date not in self.usage_tracker: self.usage_tracker[current_date] {} if model not in self.usage_tracker[current_date]: self.usage_tracker[current_date][model] 0 self.usage_tracker[current_date][model] tokens_used def check_budget(self, estimated_cost): 检查预算限制 current_usage self.get_current_usage() return current_usage estimated_cost self.monthly_budget def optimize_prompt(self, prompt, max_tokens1000): 优化提示词减少token使用 # 实现提示词压缩逻辑 optimized self.compress_prompt(prompt, max_tokens) return optimized9. 安全与伦理考虑9.1 内容安全过滤确保生成内容符合安全标准class SafetyFilter: def __init__(self): self.sensitive_keywords [敏感词1, 敏感词2] # 实际使用时需要完善 def check_content_safety(self, content): 检查内容安全性 for keyword in self.sensitive_keywords: if keyword in content.lower(): return False, f包含敏感内容: {keyword} return True, 内容安全 def filter_response(self, response): 过滤不安全回复 is_safe, message self.check_content_safety(response) if not is_safe: return 抱歉我无法提供该问题的回答。 return response9.2 隐私保护措施保护用户数据和隐私class PrivacyProtector: def __init__(self): self.anonymization_rules { r\b\d{11}\b: PHONE_NUMBER, # 手机号 r\b\d{18}\b: ID_CARD, # 身份证号 # 更多规则... } def anonymize_text(self, text): 匿名化处理文本 anonymized text for pattern, replacement in self.anonymization_rules.items(): anonymized re.sub(pattern, replacement, anonymized) return anonymized def secure_data_handling(self, user_input): 安全数据处理流程 # 1. 匿名化处理 anonymized_input self.anonymize_text(user_input) # 2. 记录审计日志不包含敏感信息 self.log_audit_trail(anonymized_input) return anonymized_input通过本教程的系统学习开发者可以掌握从LLM基础到智能体开发的完整技术栈。建议按照章节顺序实践每个示例代码逐步构建复杂的大模型应用。在实际项目中要特别注意性能优化、成本控制和安全性保障确保应用的稳定可靠。