尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

LangChain与Hugging Face实战:从零构建生成式AI应用

LangChain与Hugging Face实战:从零构建生成式AI应用 这次我们来看一个 Udemy 上的生成式 AI 实战课程《Complete Generative AI Course With Langchain and Huggingface part1》。这门课的重点不是空谈概念而是手把手教你如何将 LangChain 和 Hugging Face 这两个强大的工具结合起来构建真正可用的 AI 应用。对于开发者来说最关心的问题往往是学完能不能立刻上手需要什么环境代码跑不跑得通这篇文章就带你从零开始拆解这门课程的核心内容并提供一个可落地的本地实践路线。课程的核心是 LangChain 和 Hugging Face。LangChain 是一个用于开发由语言模型驱动的应用程序的框架它解决了模型调用、上下文管理、工具链集成等复杂问题。而 Hugging Face 则是一个包含数千个预训练模型和数据集的开源平台是获取 AI 模型最便捷的“超市”。这门课程的第一部分主要目标就是打通这两者让你学会如何利用 LangChain 来灵活调度 Hugging Face 上的模型完成文本生成、问答、摘要等具体任务。对于想快速入门的开发者本文将重点关注几个实际问题环境配置到底麻不麻烦是否需要高性能 GPU如何解决 Hugging Face 模型下载慢的痛点以及如何用最少的代码跑通第一个 LangChain Hugging Face 应用。我们会按照“环境准备 - 模型加载 - 功能测试 - 项目集成”的顺序一步步验证整个流程的可行性。1. 核心能力速览在深入细节之前我们先通过一个表格快速了解学完这门课程第一部分后你将掌握的核心能力与技术栈要点。能力项说明与课程聚焦点技术栈核心LangChain (应用框架) Hugging Face (模型库/平台)主要学习功能文本生成、问答系统、文本摘要、利用 Pipeline 调用模型硬件门槛依赖具体模型。部分小模型如 GPT-2、DistilBERT可在 CPU 或低显存 GPU2G-4G上运行大模型需更高配置。课程通常以轻量级模型演示。环境依赖Python 3.8, Pip 包管理需要安装langchain,transformers,torch等库。关键挑战Hugging Face 模型/数据集国内下载速度不同模型对输入输出的格式要求LangChain 组件如 LLMChain, PromptTemplate的正确使用。产出物可运行的 Python 脚本能够通过 LangChain 标准化接口调用 Hugging Face 模型完成特定任务。适合场景希望快速上手生成式 AI 应用的开发者想了解如何将开源模型集成到工作流中的工程师学习 AI 应用开发框架的学生。2. 适用场景与使用边界学习这门课程并实践 LangChain Hugging Face主要适用于以下几类场景快速原型验证当你有一个新想法比如做一个智能客服助手或内容摘要工具可以用 Hugging Face 上的现成模型和 LangChain 的快速组装能力在几小时内搭建出可演示的原型。理解 AI 应用开发流程通过 LangChain你能系统地学习如何组织提示词Prompt、管理对话历史Memory、连接外部工具Tools这是构建复杂 AI 应用的基石。低成本探索模型能力Hugging Face 上有海量免费模型涵盖文本、图像、语音。你可以用很小的代价测试不同模型在特定任务上的效果为产品选型提供依据。企业内部工具开发对于数据敏感或需要定制化的场景使用开源模型在本地或内网部署结合 LangChain 构建内部工具如合同审核助手、代码辅助工具能更好地满足安全和合规要求。需要注意的使用边界模型能力限制Hugging Face 上的开源模型尤其在对话、创造性写作方面其效果通常与商业大模型如 GPT-4有差距。课程中演示的模型更适合完成定义明确的任务如分类、摘要而非开放域的长篇对话。计算资源依赖虽然课程选用轻量模型但实际应用时若需调用更大的模型如 LLaMA 系列、ChatGLM必须评估本地或服务器的 GPU 显存通常需要 8G 以上和内存。网络与合规直接从 Hugging Face 下载模型需要稳定的网络环境。在国内可能需要配置镜像源。此外使用任何模型尤其是涉及内容生成时必须遵守其开源协议并确保生成内容符合法律法规和公序良俗不用于制造虚假信息、侵权内容或进行非法活动。3. 环境准备与前置条件开始实践前请确保你的开发环境满足以下基本要求。这是后续所有步骤能顺利进行的基础。操作系统Windows 10/11, macOS, 或 Linux (如 Ubuntu 20.04) 均可。本文以 Windows 为例命令在 Linux/macOS 终端中可能略有不同。Python 版本推荐使用 Python 3.8 至 3.11 版本。避免使用 Python 3.12 等过新版本以免某些库尚未兼容。可以使用python --version检查。包管理工具确保pip已更新至最新版。pip install --upgrade pip虚拟环境强烈推荐为项目创建独立的 Python 虚拟环境避免包冲突。# 创建虚拟环境 python -m venv langchain_hf_env # 激活虚拟环境 # Windows: langchain_hf_env\Scripts\activate # Linux/macOS: # source langchain_hf_env/bin/activate基础依赖安装在激活的虚拟环境中安装最核心的库。pip install langchain transformers torchlangchain: 核心框架。transformers: Hugging Face 提供的模型加载和推理库。torch: PyTorch 深度学习框架transformers 的后端之一。可选GPU 支持如果你有 NVIDIA GPU 并希望使用 GPU 加速需要安装对应版本的 CUDA 和torch。访问 PyTorch 官网 获取适合你系统的安装命令。例如对于 CUDA 11.8pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118网络准备由于需要从 Hugging Face 下载模型国内用户可能会遇到速度慢或连接失败的问题。提前准备好解决方案至关重要。方案一使用国内镜像源。在运行代码前设置环境变量。# Linux/macOS export HF_ENDPOINThttps://hf-mirror.com # Windows (PowerShell) $env:HF_ENDPOINThttps://hf-mirror.com # Windows (CMD) set HF_ENDPOINThttps://hf-mirror.com方案二手动下载模型。在 Hugging Face 官网找到模型页面如gpt2手动下载所有文件到本地目录然后在代码中指定local_files_onlyTrue和模型本地路径。4. 安装部署与启动方式这里的“启动”指的是准备好开发环境和第一个可运行的脚本。与部署一个 Web 服务不同LangChain Hugging Face 的学习初期主要是编写和运行 Python 脚本。验证基础环境创建一个简单的 Python 脚本test_env.py测试关键库是否成功安装。# test_env.py import langchain import transformers import torch print(fLangChain version: {langchain.__version__}) print(fTransformers version: {transformers.__version__}) print(fTorch version: {torch.__version__}) print(fCUDA available: {torch.cuda.is_available()}) if torch.cuda.is_available(): print(fGPU device: {torch.cuda.get_device_name(0)})运行python test_env.py确认无报错并检查 CUDA 是否可用如果安装了 GPU 版。准备第一个 LangChain Hugging Face 脚本我们将创建一个最简单的文本生成示例。新建文件first_app.py。# first_app.py from langchain.llms import HuggingFacePipeline from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline, AutoModelForSeq2SeqLM import torch # 设置模型名称这里使用一个较小的模型确保能在大多数环境运行 model_id gpt2 # 或者 distilgpt2 更小 # 1. 加载 tokenizer 和 model print(fLoading model {model_id}...) tokenizer AutoTokenizer.from_pretrained(model_id) # 根据模型类型选择 AutoModel对于 GPT-2 这类因果语言模型使用 AutoModelForCausalLM model AutoModelForCausalLM.from_pretrained(model_id) # 2. 创建 transformers pipeline print(Creating pipeline...) pipe pipeline( text-generation, modelmodel, tokenizertokenizer, max_new_tokens50, # 控制生成文本的最大长度 device0 if torch.cuda.is_available() else -1 # 指定设备-1 为 CPU ) # 3. 将 pipeline 包装成 LangChain 的 LLM llm HuggingFacePipeline(pipelinepipe) # 4. 使用 LangChain LLM 进行生成 prompt Once upon a time in a land far away, print(f\nPrompt: {prompt}) result llm(prompt) print(fGenerated: {result})这个脚本完成了从 Hugging Face 加载模型到通过 LangChain 接口进行调用的完整流程。运行脚本在终端中确保虚拟环境已激活然后运行python first_app.py。首次运行会下载gpt2模型文件约 500MB。如果设置了镜像环境变量HF_ENDPOINT会从镜像站下载速度更快。观察输出如果一切顺利你会看到加载日志以及模型根据提示词“Once upon a time...”续写的一段文本。可能的错误如果下载失败请检查网络或镜像配置。如果显存不足OOM尝试将模型换成更小的distilgpt2或在pipeline中设置device-1强制使用 CPU速度会慢很多。5. 功能测试与效果验证成功运行第一个脚本后我们可以基于课程内容设计几个更具体的功能测试来验证 LangChain 和 Hugging Face 结合的实际能力。5.1 测试一使用不同的 Hugging Face 模型课程中可能会介绍多种类型的模型。我们来测试一个用于文本摘要的 Seq2Seq 模型。# test_summarization.py from langchain.llms import HuggingFacePipeline from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline # 使用一个专门用于摘要的模型例如 facebook/bart-large-cnn model_id facebook/bart-large-cnn print(fLoading summarization model {model_id}...) tokenizer AutoTokenizer.from_pretrained(model_id) model AutoModelForSeq2SeqLM.from_pretrained(model_id) # 创建摘要任务的 pipeline summarizer_pipe pipeline( summarization, modelmodel, tokenizertokenizer, max_length100, # 摘要最大长度 min_length30, # 摘要最小长度 ) llm HuggingFacePipeline(pipelinesummarizer_pipe) # 输入一段长文本 long_text Artificial intelligence (AI) is intelligence demonstrated by machines, as opposed to natural intelligence displayed by animals including humans. Leading AI textbooks define the field as the study of \intelligent agents\: any system that perceives its environment and takes actions that maximize its chance of achieving its goals. Some popular accounts use the term \artificial intelligence\ to describe machines that mimic \cognitive\ functions that humans associate with the human mind, such as \learning\ and \problem solving\. ... print(fOriginal text length: {len(long_text)} characters) # 通过 LangChain 调用 summary llm(long_text) print(f\nSummary: {summary})验证点观察模型是否能生成一个连贯、简洁的摘要。这验证了 LangChain 可以适配不同类型的 Hugging Face pipelinetext-generationvssummarization。5.2 测试二利用 LangChain 的 PromptTemplateLangChain 的核心优势之一是提示词管理。测试如何使用PromptTemplate来结构化输入。# test_prompt_template.py from langchain.llms import HuggingFacePipeline from langchain import PromptTemplate, LLMChain from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM import torch model_id gpt2 tokenizer AutoTokenizer.from_pretrained(model_id) model AutoModelForCausalLM.from_pretrained(model_id) text_gen_pipe pipeline( text-generation, modelmodel, tokenizertokenizer, max_new_tokens80, device0 if torch.cuda.is_available() else -1 ) llm HuggingFacePipeline(pipelinetext_gen_pipe) # 定义 PromptTemplate template You are a helpful assistant. Answer the following question concisely. Question: {question} Answer: prompt PromptTemplate(templatetemplate, input_variables[question]) # 创建 LLMChain llm_chain LLMChain(promptprompt, llmllm) # 运行 Chain question What is the capital of France? result llm_chain.run(question) print(fQ: {question}) print(fA: {result})验证点成功将用户问题{question}动态填充到预设的提示词模板中并通过LLMChain执行。这为构建多轮对话、复杂工作流打下了基础。5.3 测试三观察资源占用CPU/GPU了解应用运行时的资源消耗对于部署至关重要。我们可以在代码中添加简单的监控。# test_resource_usage.py import psutil # 需要安装: pip install psutil import os import time from langchain.llms import HuggingFacePipeline from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM import torch def get_process_memory(): 获取当前进程的内存占用MB process psutil.Process(os.getpid()) return process.memory_info().rss / 1024 / 1024 print(fInitial memory usage: {get_process_memory():.2f} MB) model_id gpt2 print(fLoading {model_id}...) start_load time.time() tokenizer AutoTokenizer.from_pretrained(model_id) model AutoModelForCausalLM.from_pretrained(model_id) print(fModel loaded in {time.time() - start_load:.2f} seconds) print(fMemory after loading model: {get_process_memory():.2f} MB) pipe pipeline( text-generation, modelmodel, tokenizertokenizer, max_new_tokens50, device0 if torch.cuda.is_available() else -1 ) llm HuggingFacePipeline(pipelinepipe) print(fMemory after creating pipeline: {get_process_memory():.2f} MB) # 执行推理 prompt The future of AI is start_infer time.time() result llm(prompt) infer_time time.time() - start_infer print(fInference time: {infer_time:.2f} seconds) print(fMemory after inference: {get_process_memory():.2f} MB) print(fResult: {result}) # 如果是 GPU打印显存信息 if torch.cuda.is_available(): print(fGPU memory allocated: {torch.cuda.memory_allocated(0) / 1024**2:.2f} MB) print(fGPU memory cached: {torch.cuda.memory_reserved(0) / 1024**2:.2f} MB)验证点运行此脚本你可以直观看到模型加载前后内存的增长推理耗时以及 GPU 显存的占用情况。这对于评估模型是否能在你的目标环境中运行至关重要。6. 接口 API 与批量任务虽然课程第一部分可能未深入涉及但将 LangChain 应用封装成 API 服务或处理批量任务是实际项目中的常见需求。这里提供扩展思路和简单示例。6.1 快速搭建一个简易 API 服务使用 FastAPI 可以快速将你的模型包装成 HTTP API。安装 FastAPIpip install fastapi uvicorn创建 API 脚本api_server.py# api_server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from langchain.llms import HuggingFacePipeline from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM import torch import asyncio app FastAPI(titleLangChain-HF Demo API) # 全局加载模型启动时加载一次 model_id gpt2 print(Loading model on startup...) tokenizer AutoTokenizer.from_pretrained(model_id) model AutoModelForCausalLM.from_pretrained(model_id) pipe pipeline( text-generation, modelmodel, tokenizertokenizer, max_new_tokens100, device0 if torch.cuda.is_available() else -1 ) llm HuggingFacePipeline(pipelinepipe) print(Model loaded.) # 定义请求体 class GenerationRequest(BaseModel): prompt: str max_length: int 100 app.post(/generate) async def generate_text(request: GenerationRequest): try: # 注意LangChain 的调用可能是阻塞的在异步环境中使用 run_in_executor loop asyncio.get_event_loop() result await loop.run_in_executor(None, llm, request.prompt) return {prompt: request.prompt, generated_text: result} except Exception as e: raise HTTPException(status_code500, detailstr(e)) app.get(/health) async def health_check(): return {status: healthy} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)启动服务python api_server.py。服务将在http://127.0.0.1:8000启动。测试 API使用curl或 Postman 发送请求。curl -X POST http://127.0.0.1:8000/generate \ -H Content-Type: application/json \ -d {prompt: Once upon a time, max_length: 50}6.2 处理批量任务对于需要处理大量文本的任务如批量摘要、情感分析可以编写脚本进行批处理。# batch_processing.py import json from pathlib import Path from langchain.llms import HuggingFacePipeline from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM # 1. 加载模型 (以摘要模型为例) model_id facebook/bart-large-cnn tokenizer AutoTokenizer.from_pretrained(model_id) model AutoModelForSeq2SeqLM.from_pretrained(model_id) summarizer_pipe pipeline(summarization, modelmodel, tokenizertokenizer) llm HuggingFacePipeline(pipelinesummarizer_pipe) # 2. 定义输入输出 input_dir Path(./input_articles) output_dir Path(./output_summaries) output_dir.mkdir(exist_okTrue) # 3. 假设每个输入是一个 .txt 文件 for input_file in input_dir.glob(*.txt): with open(input_file, r, encodingutf-8) as f: article_text f.read() print(fProcessing {input_file.name}...) try: summary llm(article_text) # 保存结果 output_file output_dir / f{input_file.stem}_summary.txt with open(output_file, w, encodingutf-8) as f_out: f_out.write(summary) print(f - Saved to {output_file}) except Exception as e: print(f - Error processing {input_file.name}: {e}) print(Batch processing complete.)关键点批量处理时务必加入异常捕获和日志记录防止单个文件错误导致整个任务中断。对于大量数据可以考虑使用队列如 Redis或并行处理库如multiprocessing来提高效率。7. 资源占用与性能观察在本地运行生成式 AI 应用性能是关键考量。以下是一些通用的观察和优化思路内存/显存占用主要阶段模型加载时将模型从磁盘读入内存/显存此时占用达到峰值。gpt2约500MB参数加载后内存占用可能增加1-2GB显存占用类似。推理时根据输入文本长度和生成长度会有额外的激活内存占用。通常比加载模型本身的占用小。多任务/并发时如果同时运行多个模型实例或处理非常长的序列占用会叠加。性能影响因素模型大小参数越多速度越慢占用越高。始终从你能接受的最小模型开始测试。输入/输出长度max_new_tokens参数直接影响生成时间和内存占用。硬件GPU尤其是支持 Tensor Core 的现代 GPU比 CPU 快数十倍甚至上百倍。量化许多模型提供量化版本如 int8能显著减少内存占用并提升推理速度但可能轻微损失精度。在 Hugging Face 模型卡中寻找-int8或-4bit后缀的版本。监控方法GPU在命令行使用nvidia-smi或gpustat工具。CPU/内存使用系统任务管理器或 Python 的psutil库如前文示例。在代码中 profiling可以使用torch.cuda的事件记录器或 Python 的cProfile模块来分析热点。优化建议从 CPU 开始如果只是学习和功能验证优先使用 CPU。虽然慢但环境问题最少。使用更小的模型用distilgpt2代替gpt2用t5-small代替t5-base。限制生成长度合理设置max_length/max_new_tokens。启用注意力优化在from_pretrained中设置use_cacheTrue默认并考虑torch.compilePyTorch 2.0进行图优化。考虑模型量化如果显存紧张寻找并使用量化模型。8. 常见问题与排查方法在学习和实践过程中你几乎一定会遇到以下问题。这里提供系统的排查思路。问题现象可能原因排查方式解决方案ConnectionError或下载模型极慢网络连接 Hugging Face 官网不畅。检查网络尝试ping huggingface.co。观察下载链接是否被重定向。1. 设置HF_ENDPOINT环境变量为国内镜像。2. 手动下载模型文件到本地代码中指定local_files_onlyTrue。OutOfMemoryError (CUDA)GPU 显存不足无法加载模型或进行推理。运行nvidia-smi查看显存占用。确认模型大小参数文件.bin或.safetensors的大小。1. 换用更小的模型。2. 在pipeline中设置device-1使用 CPU。3. 尝试量化模型。4. 减少batch_size和max_length。KeyError: ‘generated_text’或其他输出格式错误模型的输出格式与 LangChain 的HuggingFacePipeline预期不符。打印pipe的直接输出查看其结构。不同任务的pipeline输出格式不同。可能需要自定义一个继承自LLM的类或者对pipeline的输出进行后处理以适配 LangChain。Token indices sequence length is longer than...输入文本过长超过了模型的最大上下文长度。检查模型的max_position_embeddings或model_max_length属性。1. 将长文本进行分割。2. 换用支持更长上下文的模型。3. 在tokenizer调用时设置truncationTrue。No module named ‘langchain’Python 环境未安装langchain包或不在正确的虚拟环境中。在终端运行 pip listgrep langchain。检查终端提示符是否显示虚拟环境已激活。使用 API 服务时请求超时或无响应模型推理时间过长超过了 HTTP 服务的默认超时时间。查看服务端日志确认模型是否在正常推理。用短文本测试。1. 在客户端增加超时时间。2. 在服务端使用异步处理并立即返回任务 ID通过轮询获取结果。3. 优化模型或使用更小的模型。生成的文本质量差、不连贯或重复提示词设计不佳、模型能力有限或生成参数如温度temperature设置不当。检查提示词是否清晰。尝试不同的temperature(0.1-1.0) 和top_p值。1. 优化提示词工程。2. 调整生成参数降低temperature减少随机性启用top_p采样。3. 换用更强大的模型。9. 最佳实践与使用建议基于课程学习和项目实践总结出以下建议帮助你更高效、更稳定地使用 LangChain 和 Hugging Face从官方文档和示例开始遇到问题首先查阅 LangChain 官方文档 和 Hugging Face Transformers 文档 。它们的Cookbook或Tutorials部分提供了大量可运行的例子。模型选择策略明确任务先在 Hugging Face 模型库按任务Text Generation, Summarization, Question Answering筛选。看下载量和使用量通常下载量大的模型更稳定、社区支持更好。看模型卡Model Card仔细阅读模型卡了解其训练数据、适用范围、偏差和限制。从小开始永远先用最小的可用模型如distilgpt2,t5-small验证流程再逐步升级。环境隔离与依赖管理为每个项目创建独立的虚拟环境venv或conda并使用requirements.txt记录所有依赖包及其版本。这能最大程度避免版本冲突。代码结构化不要将所有逻辑写在一个脚本里。将模型加载、提示词构建、链Chain定义、工具Tool定义等模块化。这有利于调试和复用。加入日志和错误处理在生产或重要的实验脚本中使用logging模块记录信息、警告和错误。对网络请求、模型调用等可能失败的操作进行try...except包装。安全与合规数据隐私如果处理用户数据确保符合相关隐私法规如 GDPR。避免将敏感数据发送到不信任的外部 API即使是你自己部署的也要注意网络安全。内容安全生成式模型可能产生有害、偏见或虚假内容。在应用层设计内容过滤和审核机制。版权与授权确保你使用的模型其许可证允许你的使用方式研究、商业等。对于生成内容特别是用于商业用途时要留意版权风险。性能监控与优化在开发后期对关键路径进行性能分析。使用time模块记录耗时关注模型加载时间和推理延迟。根据 profiling 结果进行优化例如缓存模型、使用更高效的注意力实现等。通过《Complete Generative AI Course With Langchain and Huggingface》第一部分的学习你掌握的不是某个特定模型的用法而是一套方法论如何利用 LangChain 这个“框架”去灵活地集成和调度 Hugging Face 这个“模型仓库”里的各种工具。这套方法的价值在于其通用性和可扩展性。最应该优先验证的就是本文第 4 步的“第一个脚本”。它能跑通就意味着你的基础环境、网络配置、核心库版本都没有问题整个技术栈的闭环已经建立。最容易踩的坑无非是网络下载和显存不足对应的解决方案镜像源、使用 CPU、换小模型也已明确。接下来你可以沿着两个方向深入一是纵向深入 LangChain学习其更高级的概念如 Agents智能体、Memory记忆、Callbacks回调来构建更复杂的应用二是横向拓展 Hugging Face 模型尝试图像生成Stable Diffusion、语音识别Whisper、嵌入模型sentence-transformers等用同一套 LangChain 范式去驾驭多模态任务。
返回列表