LangChain

LangChain

开发由语言模型驱动的应用程序的框架

LangChain是什么

LangChain是用在开发由大型语言模型(LLMs)驱动的应用程序的框架。框架通过简化LLM应用的开发、生产化和部署过程,帮助开发者快速构建智能代理和应用。LangChain的核心功能包括快速上手的开发体验、强大的生产化支持以及灵活的部署选项。框架由多个开源库组成,如langchain-corelangchainlanggraph,提供从基础抽象到复杂应用编排的全面支持。LangChain集成LangSmith和LangGraph,分别用在应用的评估和生产级编排,帮助开发者从原型到生产无缝过渡。

LangChain

LangChain的主要功能

  • 开发:LangChain提供丰富的开源组件和第三方集成,帮助开发者快速构建基于大型语言模型(LLM)的应用程序。
  • 生产化:通过LangSmith,LangChain支持对应用进行评估、监控和优化,确保应用在生产环境中的性能和稳定性。
  • 部署:支持将应用转化为生产级API和智能代理,支持高并发处理和持久执行,满足企业级部署需求。
  • 集成:LangChain支持多种LLM模型以及丰富的第三方工具集成,极大地扩展应用的功能和适用范围。
  • 社区与扩展:LangChain拥有活跃的社区,社区成员共同维护第三方集成,且用户能轻松添加自定义工具和模型,满足特定需求。

如何使用LangChain

  • 安装LangChain:LangChain生态系统被拆分为不同的包,支持选择安装所需的功能模块。
    • 安装主要的langchain
pip <span class="token function">install</span> langchain
    • 安装特定的集成包
      • 如需要使用OpenAI的模型,安装langchain-openai包:
pip <span class="token function">install</span> langchain-openai
      • 如需要使用Anthropic的模型,安装langchain-anthropic包:
pip <span class="token function">install</span> langchain-anthropic
    • 安装其他工具包:如需要使用其他工具,安装langchain-community包:
pip <span class="token function">install</span> langchain-community
  • 配置环境变量:确保API密钥已经配置到环境变量中。例如,如果使用OpenAI,这样设置:
<span class="token builtin class-name">export</span> <span class="token assign-left variable">OPENAI_API_KEY</span><span class="token operator">=</span>your_openai_api_key
  • 编写代码:以下是简单的LangChain应用示例,展示如何创建一个基于OpenAI的聊天机器人。
<span class="token keyword">from</span> langchain<span class="token punctuation">.</span>chat_models <span class="token keyword">import</span> ChatOpenAI
<span class="token keyword">from</span> langchain<span class="token punctuation">.</span>prompts <span class="token keyword">import</span> ChatPromptTemplate
<span class="token keyword">from</span> langchain<span class="token punctuation">.</span>chains <span class="token keyword">import</span> LLMChain

<span class="token comment"># 初始化聊天模型</span>
model <span class="token operator">=</span> ChatOpenAI<span class="token punctuation">(</span>model_name<span class="token operator">=</span><span class="token string">"gpt-3.5-turbo"</span><span class="token punctuation">)</span>

<span class="token comment"># 定义聊天提示模板</span>
prompt_template <span class="token operator">=</span> ChatPromptTemplate<span class="token punctuation">.</span>from_template<span class="token punctuation">(</span>
<span class="token string">"You are a helpful assistant. Answer the user's question: {question}"</span>
<span class="token punctuation">)</span>

<span class="token comment"># 创建LLM链</span>
chain <span class="token operator">=</span> LLMChain<span class="token punctuation">(</span>llm<span class="token operator">=</span>model<span class="token punctuation">,</span> prompt<span class="token operator">=</span>prompt_template<span class="token punctuation">)</span>

<span class="token comment"># 运行链</span>
response <span class="token operator">=</span> chain<span class="token punctuation">.</span>invoke<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">"question"</span><span class="token punctuation">:</span> <span class="token string">"What is the capital of France?"</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span>
  • 使用LangChain构建更复杂的应用:LangChain支持构建更复杂的应用,例如智能代理和工作流。以下是用LangChain构建智能代理的示例。
<span class="token keyword">from</span> langchain<span class="token punctuation">.</span>agents <span class="token keyword">import</span> create_agent
<span class="token keyword">from</span> langchain<span class="token punctuation">.</span>tools <span class="token keyword">import</span> Tool

<span class="token comment"># 定义一个简单的工具函数</span>
<span class="token keyword">def</span> <span class="token function">get_weather</span><span class="token punctuation">(</span>city<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">str</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">"""Get weather for a given city."""</span>
<span class="token keyword">return</span> <span class="token string-interpolation"><span class="token string">f"It's always sunny in </span><span class="token interpolation"><span class="token punctuation">{</span>city<span class="token punctuation">}</span></span><span class="token string">!"</span></span>

<span class="token comment"># 创建智能代理</span>
agent <span class="token operator">=</span> create_agent<span class="token punctuation">(</span>
model<span class="token operator">=</span><span class="token string">"gpt-3.5-turbo"</span><span class="token punctuation">,</span>
tools<span class="token operator">=</span><span class="token punctuation">[</span>Tool<span class="token punctuation">(</span>name<span class="token operator">=</span><span class="token string">"get_weather"</span><span class="token punctuation">,</span> func<span class="token operator">=</span>get_weather<span class="token punctuation">,</span> description<span class="token operator">=</span><span class="token string">"Get weather for a given city"</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
prompt<span class="token operator">=</span><span class="token string">"You are a helpful assistant that can get weather information."</span>
<span class="token punctuation">)</span>

<span class="token comment"># 运行智能代理</span>
response <span class="token operator">=</span> agent<span class="token punctuation">.</span>invoke<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">"messages"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span><span class="token string">"role"</span><span class="token punctuation">:</span> <span class="token string">"user"</span><span class="token punctuation">,</span> <span class="token string">"content"</span><span class="token punctuation">:</span> <span class="token string">"What is the weather in Paris?"</span><span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span>
  • 使用LangSmith进行应用评估和优化:LangSmith是用于评估和优化LangChain应用的工具。使用LangSmith能追踪应用的性能、监控运行情况并进行优化。
<span class="token keyword">from</span> langchain<span class="token punctuation">.</span>smith <span class="token keyword">import</span> LangSmith

<span class="token comment"># 初始化LangSmith</span>
langsmith <span class="token operator">=</span> LangSmith<span class="token punctuation">(</span><span class="token punctuation">)</span>

<span class="token comment"># 评估应用</span>
evaluation_result <span class="token operator">=</span> langsmith<span class="token punctuation">.</span>evaluate<span class="token punctuation">(</span>chain<span class="token punctuation">,</span> <span class="token builtin">input</span><span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">"question"</span><span class="token punctuation">:</span> <span class="token string">"What is the capital of France?"</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>evaluation_result<span class="token punctuation">)</span>
  • 部署LangChain应用:LangChain支持将应用部署为生产级API或智能代理。使用LangGraph将应用转化为生产级服务。
<span class="token keyword">from</span> langchain<span class="token punctuation">.</span>graph <span class="token keyword">import</span> LangGraph

<span class="token comment"># 初始化LangGraph</span>
graph <span class="token operator">=</span> LangGraph<span class="token punctuation">(</span><span class="token punctuation">)</span>

<span class="token comment"># 将应用添加到LangGraph</span>
graph<span class="token punctuation">.</span>add_chain<span class="token punctuation">(</span>chain<span class="token punctuation">)</span>

<span class="token comment"># 部署为API</span>
api <span class="token operator">=</span> graph<span class="token punctuation">.</span>deploy_as_api<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>api<span class="token punctuation">.</span>url<span class="token punctuation">)</span>
  •  使用LangChain的社区资源:LangChain拥有活跃的社区,访问LangChain的GitHub仓库、文档和社区论坛,获取更多资源和帮助。

LangChain的应用场景

  • 自然语言处理(NLP):用在文本生成、文本分类和文本摘要等任务,帮助开发者构建高效的语言处理应用。
  • 人工智能助手:创建智能聊天机器人和虚拟助手,为用户提供个性化的服务和交互体验。
  • 企业自动化:支持企业自动化工作流程,通过智能代理简化复杂任务,提高工作效率。
  • 教育科技:用在开发个性化学习工具和智能辅导系统,提升教育质量和学习效果。
  • 医疗保健:提供医疗咨询服务和数据分析,辅助医疗决策,改善患者护理。