资讯动态

LLM-Python实战指南:从零构建大语言模型应用与智能体

发布时间:2026/9/10 17:43:47 来源:尧图企业网站定制
1. 项目概述与学习路径规划如果你和我一样是个喜欢动手的开发者看到“LLM”、“LangChain”、“Agent”这些词就心痒痒想立刻写点代码跑起来但又苦于官方文档太零散、教程太抽象那么这个名为llm-python的开源项目绝对是你不能错过的宝藏。它不是什么高深莫测的框架而是一套由资深从业者 Samuel Chan 精心整理的、完全面向实战的 Python 代码示例和教程集合。核心目标就一个让你通过运行代码、修改代码真正学会如何用 Python 构建基于大语言模型的应用和智能体。这个项目最吸引我的地方在于它的“自包含”和“可选择性”。它不像一个庞大的、必须从头学到尾的课程而是把 LLM 应用开发的各个关键环节——比如如何调用 OpenAI API、如何用 LangChain 构建问答系统、如何利用 LlamaIndex 处理私有文档、如何玩转向量数据库 Chroma 和 Pinecone乃至最新的多智能体Multi-Agent模式——都拆解成了一个个独立的 Python 脚本。每个脚本都聚焦于解决一个具体问题你完全可以根据自己当前的需求像点菜一样选择学习哪个部分。比如你今天就想知道怎么让 GPT 读取你的 CSV 文件并回答问题那就直接找到对应的脚本运行、分析马上就能获得可用的代码和清晰的理解。项目背后是超过 9 小时的配套视频教程在 Samuel 的 YouTube 频道但代码仓库本身才是精髓。它随着 LLM 生态的快速演进持续更新比如在 2025 年 5 月就新增了基于最新版 OpenAI Agent SDK 的 6 个多智能体模式示例涵盖了“交接与委托”、“工具使用”、“确定性工作流”、“评审与批判”、“并行处理”和“安全护栏”这些在实际构建复杂 Agent 系统时必须掌握的核心设计模式。这意味着你学到的不是过时的知识而是当前业界正在使用的最佳实践。无论你是想快速搭建一个基于私有知识的聊天机器人还是想深入理解嵌入Embeddings和检索增强生成RAG的底层原理或是渴望构建具备复杂推理和协作能力的多智能体系统这个项目都提供了从入门到进阶的完整代码路径。接下来我就带你深入这个宝库拆解它的核心内容、分享我的实操经验并告诉你如何最高效地利用它来提升你的 LLM 开发能力。2. 环境搭建与依赖管理实战万事开头难但把环境搭好后面就一马平川了。llm-python项目的环境配置非常典型是学习 LLM 开发的第一个实操环节里面有不少细节值得注意。2.1 项目初始化与依赖安装首先把代码克隆到本地是标准操作git clone https://github.com/onlyphantom/llm-python.git cd llm-python接下来是关键一步安装依赖。项目提供了requirements.txt文件。我的建议是不要直接pip install -r requirements.txt尤其是在 Windows 或某些 ARM 架构的 Mac 上。因为这个文件里可能包含一些对系统环境有特定要求的包比如triton。直接安装可能会遇到令人头疼的兼容性错误。实操心得更稳健的做法是先创建一个干净的 Python 虚拟环境使用venv或conda然后先安装核心、兼容性广的包再按需安装特定示例所需的依赖。你可以先执行pip install openai langchain langchain-community langchain-openai chromadb这些是大部分示例的基础。运行某个具体脚本时如果报错缺少模块再根据错误提示单独安装。例如用到 LlamaIndex 就pip install llama-index用到 Pinecone 就pip install pinecone-client。这种“按需安装”的方式能最大程度避免环境冲突。2.2 API 密钥管理与.env配置LLM 应用离不开各种 API 服务。项目要求创建一个.env文件来管理密钥这是专业开发中的必备习惯。你的.env文件应该放在项目根目录内容大致如下# 核心必备OpenAI 是大多数示例的基础 OPENAI_API_KEYsk-你的OpenAI密钥 # 强烈建议配置用于金融数据API示例体验真实工具调用 SECTORS_API_KEY你的Sectors平台密钥 # 按需配置用于特定教程 HUGGINGFACEHUB_API_TOKEN你的HuggingFace令牌 PINECONE_API_KEY你的Pinecone密钥 COHERE_API_KEY你的Cohere密钥 STABILITY_API_KEY你的Stability AI密钥 GROQ_API_KEY你的Groq密钥 DEEPSEEK_API_KEY你的DeepSeek密钥重要注意事项绝对不要将.env文件提交到 Git 仓库项目本身的.gitignore通常已经排除了它但你自己要 double-check。密钥泄露可能导致严重的经济损失和安全问题。在 Python 代码中使用python-dotenv库来加载这些环境变量。虽然示例代码可能已经内置了加载逻辑但你需要确保在运行脚本前.env文件已正确配置。免费资源利用Cohere 和 Stability AI 通常提供免费的入门额度非常适合用来体验教程第 10 部分的“科幻世界生成”示例无需绑定信用卡。HuggingFace Inference API 也有免费额度可以让你在不使用 OpenAI 的情况下体验开源模型。2.3 常见环境问题排查即使按照上述步骤你可能还是会遇到问题。下面是我踩过坑后总结的排查清单问题现象可能原因解决方案ModuleNotFoundError: No module named ‘xxx‘依赖未安装或虚拟环境未激活1. 确认已激活虚拟环境。2. 使用pip list检查包是否存在。3. 使用pip install xxx安装缺失包。ERROR: Could not find a version that satisfies the requirement tritontriton包与你的操作系统或 CPU 架构不兼容这是可选的性能加速包。直接忽略它或者在requirements.txt中注释掉triton这一行再安装。大多数示例没有它也能正常运行。openai.AuthenticationError: Incorrect API key provided.env文件中的OPENAI_API_KEY配置错误或未加载1. 检查.env文件路径是否正确变量名是否拼写错误。2. 在 Python 脚本开头手动打印os.getenv(‘OPENAI_API_KEY‘)的前几位确认是否成功加载。3. 确认 OpenAI 账户是否有余额且密钥未被禁用。运行 LangChain 示例时出现AttributeError或ImportErrorLangChain 等库版本更新较快API 发生变更这是学习社区项目最常见的痛点。llm-python项目会尽力更新但若滞后1. 查看脚本运行时的具体错误行。2. 前往 LangChain 等库的官方文档搜索相关类或函数名查看最新用法。3. 尝试降低库版本至视频录制时的版本不推荐但可作临时验证。环境搭建是学习的第一步也是筛选学习者的第一道门槛。耐心解决这些问题你对工具链的理解会更深一层。配置成功后我们就可以进入最激动人心的部分——运行并剖析那些精彩的示例代码了。3. 核心教程模块深度解析与代码实战llm-python项目的精华在于其覆盖了 LLM 应用开发的完整生命周期。我们不必按顺序学习但理解每个模块的核心思想和关联能帮助我们构建系统性的知识树。我将这些教程分为四大核心能力板块进行解析。3.1 基础连接与对话叩开 LLM 的大门这一部分对应教程的 Part 1目标是让你用最简单的代码与 GPT 等模型对话。别看它基础却是理解后续所有复杂操作的基石。核心脚本通常是像1_openai_basic.py这样的文件。关键学习点直接 API 调用学习如何使用 OpenAI Python SDK 的ChatCompletion.create方法理解model、messages包含role和content、temperature、max_tokens这些核心参数。LangChain 抽象层学习如何使用 LangChain 的ChatOpenAI类。LangChain 的价值在于它提供了一层统一、便捷的抽象让你用几乎相同的代码切换不同的模型提供商如 OpenAI、Anthropic、本地模型。# 一个极简的 LangChain 调用示例 from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0.7) response llm.invoke([HumanMessage(content“你好”)]) print(response.content)流式输出Streaming对于生成较长文本的交互流式输出能极大提升用户体验。你需要掌握如何配置streamingTrue并处理返回的迭代器。实操心得在这里不要只满足于跑通代码。尝试修改temperature从 0 到 1观察输出从确定性强到创意性强的变化。尝试问同一个问题但使用不同的system角色提示如“你是一个严谨的科学家” vs “你是一个幽默的诗人”直观感受提示词工程Prompt Engineering的威力。这是成本最低、收获最大的实验。3.2 检索增强生成让 LLM 拥有“长期记忆”这是当前 LLM 应用最主流的架构对应教程 Part 2, 3, 5, 6, 8, 9 等。核心思想是LLM 本身的知识是静态和通用的我们需要通过检索Retrieval外部知识源你的文档、数据库、网站将相关信息作为上下文Context注入给 LLM从而生成Generation更准确、更相关的回答即 RAG。关键技术栈拆解文档加载与分割使用LangChain的DocumentLoader如TextLoader,CSVLoader和TextSplitter。关键参数是chunk_size和chunk_overlap。分割过细会丢失上下文过粗则检索效率低。通常从 500-1000 字符的chunk_size和 100-200 字符的overlap开始调试。向量化与嵌入使用OpenAIEmbeddings或HuggingFaceEmbeddings将文本块转换为高维向量Embeddings。这是实现“语义搜索”而非“关键词匹配”的数学基础。项目中的 Part 5 专门用视频讲解这个概念务必理解。向量数据库存储与检索将嵌入向量存入ChromaDB或Pinecone。ChromaDB轻量、易用适合本地开发和中小型数据Pinecone是托管服务适合生产环境和大规模数据。检索时将用户问题也向量化并在数据库中查找“余弦相似度”最高的前 k 个文本块。提示词合成与问答将检索到的文本块和用户问题组合成一个精心设计的提示词Prompt发送给 LLM 生成最终答案。这就是RetrievalQA链做的事情。一个典型的 RAG 代码骨架from langchain_community.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstores import Chroma from langchain.chains import RetrievalQA # 1. 加载并分割文档 loader TextLoader(“./news/my_doc.txt”) documents loader.load() text_splitter RecursiveCharacterTextSplitter(chunk_size1000, chunk_overlap200) texts text_splitter.split_documents(documents) # 2. 创建向量存储 embeddings OpenAIEmbeddings() vectorstore Chroma.from_documents(texts, embeddings) # 3. 创建检索器 retriever vectorstore.as_retriever(search_kwargs{“k”: 4}) # 检索最相关的4个片段 # 4. 创建问答链 llm ChatOpenAI(model“gpt-4”, temperature0) qa_chain RetrievalQA.from_chain_type( llmllm, chain_type“stuff”, # 还有其他如 “map_reduce”, “refine” retrieverretriever, return_source_documentsTrue # 方便查看来源 ) # 5. 提问 result qa_chain.invoke({“query”: “文档中主要讲了什么”}) print(“答案”, result[‘result’]) print(“来源”, result[‘source_documents’])避坑指南RAG 效果不佳八成问题出在检索环节。如果 LLM 的回答胡言乱语或与文档无关请按以下顺序排查检索相关性检查retriever.get_relevant_documents(your_question)返回的文本块是否真的相关。如果不相关可能是嵌入模型不适合你的领域或者需要调整chunk_size。上下文长度确保检索到的所有文本块的总长度没有超过 LLM 的上下文窗口限制。GPT-3.5-turbo 约 16KGPT-4 约 128K。提示词设计在提示词中明确指令如“请严格根据以下上下文回答问题如果上下文不包含相关信息请说‘我不知道’。”这能有效减少模型幻觉。3.3 智能体与工具调用赋予 LLM 行动能力这是 LLM 从“聊天机器人”迈向“自主智能体”的关键一步对应教程中后期的 Part 以及 2025 年新增的 Agentic Patterns 部分。智能体的核心是“思考-行动-观察”循环ReAct PatternLLM 通过调用外部工具函数来获取信息、执行操作。核心概念工具Tool一个可供 LLM 调用的函数有明确的名称、描述和参数。例如“获取天气”工具、“执行计算”工具、“查询数据库”工具。智能体Agent一个由 LLM 驱动的决策实体它根据对话历史和当前目标决定是直接回答还是调用某个工具。代理执行器Agent Executor负责运行智能体循环的组件管理工具调用、处理结果、并将结果反馈给 LLM 进行下一轮思考。LangChain 中的智能体实现示例from langchain.agents import initialize_agent, Tool from langchain.agents import AgentType from langchain_openai import ChatOpenAI # 1. 定义工具 def search_wikipedia(query: str) - str: # 这里是模拟函数实际应调用 Wikipedia API return f“关于 {query} 的维基百科摘要...” tools [ Tool( name“Wikipedia Search”, funcsearch_wikipedia, description“当你需要回答关于具体人物、地点、事件或概念的事实性问题时非常有用。输入应该是一个具体的搜索查询词。” ), # 可以定义更多工具如计算器、数据库查询等 ] # 2. 初始化智能体 llm ChatOpenAI(model“gpt-4”, temperature0) agent initialize_agent( tools, llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, # 一种经典的代理类型 verboseTrue, # 打印出代理的思考过程对调试至关重要 handle_parsing_errorsTrue # 优雅地处理解析错误 ) # 3. 运行智能体 result agent.invoke(“爱因斯坦是在哪一年获得诺贝尔物理学奖的他因什么贡献获奖”) print(result[‘output’])当verboseTrue时你会在控制台看到类似以下的思考链这是理解智能体如何工作的绝佳窗口 Entering new AgentExecutor chain... 我需要找到爱因斯坦获得诺贝尔奖的年份和原因。这是一个事实性问题。 Action: Wikipedia Search Action Input: 爱因斯坦 诺贝尔奖 年份 贡献 Observation: 阿尔伯特·爱因斯坦于1921年获得诺贝尔物理学奖因其对理论物理的贡献特别是发现了光电效应定律。 Thought: 我已经找到了答案。 Final Answer: 阿尔伯特·爱因斯坦于1921年获得诺贝尔物理学奖因其发现了光电效应定律。高级技巧项目 2025 年新增的 6 个 Agentic Patterns 脚本展示了更复杂的多智能体协作模式。例如“交接与委托模式”模拟了不同专长的智能体如“研究员”和“写手”如何协作完成任务“评审与批判模式”引入了“评审员”智能体来检查主智能体输出的质量。学习这些模式是构建生产级、鲁棒性强的 AI 应用的关键。3.4 多模态与高级工作流教程的 Part 10 和 Part 11 带你进入了更富创意的领域。Part 10: 科幻世界生成结合 Cohere 的文本生成模型和 Stability AI 的图像生成模型根据一个简单的提示如“一个漂浮在星空中的蒸汽朋克城市”生成连贯的段落描述和对应的概念图。这演示了如何串联不同的 AI 服务 API 来构建复杂工作流。Part 11: SMOL Developer这是一个非常前沿的概念展示了一个 LLM 如何根据高层次的产品描述自动生成前端代码、后端逻辑甚至部署脚本。它体现了“用自然语言编程”的潜力是 AI 辅助软件开发的一个激动人心的方向。这部分的学习重点不在于记忆代码而在于开阔眼界理解 LLM 如何作为“胶水”和“引擎”整合不同的数字能力创造出全新的应用形态。4. 从示例到产品项目实战与经验升华运行通一个个示例脚本只是开始如何将学到的知识融会贯通应用到自己的实际项目中才是学习的最终目的。结合llm-python项目的启示和我个人的开发经验我总结出以下四个进阶实战要点。4.1 设计可维护的提示词系统在示例中提示词往往直接写在代码里。但在真实项目中这会导致代码混乱且难以调整。你需要建立一个提示词管理系统。策略一模板化使用LangChain的PromptTemplate或更强大的ChatPromptTemplate将提示词定义为带变量的字符串模板。from langchain.prompts import ChatPromptTemplate system_template “””你是一个专业的{domain}专家。请用{style}的风格回答用户关于{topic}的问题。 请严格根据以下上下文信息进行回答 {context} 如果上下文信息不足以回答问题请如实告知不要编造信息。“”” prompt_template ChatPromptTemplate.from_messages([ (“system”, system_template), (“human”, “{question}”) ]) # 动态填充 formatted_prompt prompt_template.invoke({ “domain”: “金融”, “style”: “简洁明了”, “topic”: “投资组合管理”, “context”: retrieved_docs, “question”: user_question })策略二外部化将复杂的提示词存储在单独的配置文件如 YAML、JSON或数据库中。这样产品经理或领域专家可以在不接触代码的情况下优化提示词。# prompts.yaml qa_finance: system: 你是一位拥有10年经验的资深金融分析师以严谨、客观著称。 你的任务是根据提供的公司财报片段回答用户的提问。 你的回答必须1) 引用上下文中的具体数据2) 指出数据所在的段落3) 如果信息不足明确说明。 human: “”” 上下文 {context} 问题 {question} “””然后在代码中加载并使用这些模板。4.2 构建健壮的生产级 RAG 系统教程中的 RAG 示例是简化版。生产系统需要考虑更多分层检索与重排序简单的向量相似度检索可能不够精准。可以加入“关键词检索”作为第一层快速过滤文档再用“向量检索”作为第二层进行语义匹配最后用一个更小的、专门的“重排序模型”对检索结果进行精排将最相关的片段放在最前面输入给 LLM。上下文窗口管理当检索出很多相关片段时可能超过 LLM 的上下文限制。需要使用LangChain的ContextualCompressionRetriever或自定义逻辑对片段进行摘要、过滤或选择性合并确保输入精炼且完整。元数据过滤在存储向量时一并存储片段的元数据如来源文件、章节、日期、作者等。检索时除了语义相似度还可以让用户通过元数据进行过滤如“只搜索 2023 年以后的报告”这能极大提升检索精度。评估与监控建立评估体系包括检索评估命中率、召回率。生成评估答案的事实准确性可以用另一个 LLM 判断、相关性、有用性。业务指标用户满意度、问题解决率。 定期用一批测试问题运行你的 RAG 系统监控其表现是否下降。4.3 智能体的错误处理与稳定性智能体在自由调用工具时会面临各种意外工具调用失败网络超时、API 返回错误。解析错误LLM 返回的文本无法被解析为有效的工具调用指令。无限循环智能体陷入“思考-调用-无果-再思考”的死循环。加固策略设置超时与重试为每个工具调用包装上超时和有限次重试逻辑。结构化输出强制要求 LLM 以严格的 JSON 格式输出思考和行动指令这比解析自然语言稳定得多。OpenAI 的 Function Calling 和 LangChain 的StructuredOutputParser就是为此而生。设置最大迭代次数在初始化AgentExecutor时务必设置max_iterations参数例如 10防止无限循环消耗大量 token。完善的日志记录记录智能体完整的思考链、工具调用和结果。这是调试复杂问题唯一可靠的方式。agent_executor initialize_agent( tools, llm, agentAgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, # 使用支持结构化输出的代理类型 verboseTrue, max_iterations5, early_stopping_method“generate”, # 当代理认为任务完成或无法继续时可以提前停止 handle_parsing_errors“请重试并确保输出格式正确。”, # 自定义解析错误时的提示 )4.4 成本优化与性能考量当应用从 demo 走向真实用户成本和性能成为关键。Token 成本控制缓存对相同或相似的查询结果进行缓存。LangChain提供了SemanticCache基于嵌入相似度和InMemoryCache等教程 Part 13 专门讲了缓存。模型分级对简单、事实性的查询使用便宜的模型如gpt-3.5-turbo对复杂、需要深度推理的任务使用强大的模型如gpt-4。精简上下文如前所述优化检索和提示词减少不必要的 token 输入。延迟优化异步调用对于可以并行执行的操作如同时检索多个数据源、调用多个不依赖的工具使用asyncio进行异步处理。流式响应对于生成时间较长的回答务必使用流式输出让用户先看到部分结果提升体验。边缘计算对于嵌入模型等计算密集型且相对静态的任务可以考虑使用本地模型或部署在离用户更近的边缘服务器上。备选方案与供应商管理不要绑定单一供应商使用LangChain的抽象层可以相对容易地在 OpenAI、Anthropic、Cohere、本地模型之间切换。这既是议价策略也是故障转移方案。监控用量与成本为每个 API 密钥设置使用量和成本警报。使用像LangSmithLangChain 官方平台这样的工具来追踪每次链式调用的详细消耗。学习llm-python项目就像得到了一位经验丰富的导师的代码笔记。它为你铺好了路展示了各种可能。但真正的成长始于你用自己的数据、解决自己的问题、并在这个过程中不断踩坑和爬起。从运行第一个脚本到设计出稳定、高效、可维护的 LLM 应用这条路充满挑战但也正是其魅力所在。希望这份基于该项目经验的深度解析能成为你旅途中的一块有用的路标。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价