探索 LangChain、Hugging Face、LM Studio 等 AI 应用工具

1. LangChain v0.2

LangChain Logo

简介

LangChain 是一个旨在帮助开发人员构建由大型语言模型(LLMs)驱动的应用程序的框架。其主要特点如下:

  1. 模块化组件:LangChain 提供了多个独立或组合使用的模块。
    • 提示管理 Prompt:用于优化和处理提示的工具。
    • 记忆管理 Memory:管理跨不同交互的状态。
    • 链式操作 Chain:将多个 LLM 调用链接在一起,以创建更复杂的应用程序。
    • 代理 Agent:基于用户输入动态决策的系统。
    • 回调 Calback:用于日志记录和事件跟踪。
  2. 集成能力:LangChain 支持与多个 LLM 提供商的集成,如 OpenAI、Cohere 和 Hugging Face,适用于各种应用场景。
  3. 应用场景:常见应用包括聊天机器人、文档分析工具和自动推理系统。
  4. 社区和开源:作为一个开源项目,LangChain 拥有不断增长的社区,提供广泛的支持和贡献。

安装

安装 LangChain 到 Python 环境
LangChain作为一个框架由许多包组成

pip install langchain					// 0.2.10
pip install langcahin_community			// 0.2.9
pip install langchain_openai			// 0.1.17

可以使用pip show package_name验证和查看版本

概念指南

LangChain 0.2

  • Architecture - 架构
    • langchain-core - LangChain 核心
    • Partner packages - 合作伙伴包 // 从 LangChain 社区分离的流行的包
    • langchain - LangChain
    • langchain-community - LangChain 社区
    • langgraph - LangGraph
    • langserve - LangServe
    • LangSmith - LangSmith
  • LangChain Expression Language (LCEL) - LangChain 表达式语言
    • Runnable interface - 可运行接口
  • Components - 组件
    • Chat models - 聊天模型
    • LLMs - 大型语言模型
    • Messages - 消息
    • Prompt templates - 提示模板
    • Example selectors - 示例选择器
    • Output parsers - 输出解析器
    • Chat history - 聊天历史
    • Documents - 文档
    • Document loaders - 文档加载器
    • Text splitters - 文本分割器
    • Embedding models - 嵌入模型
    • Vector stores - 向量存储
    • Retrievers - 检索器
    • Tools - 工具
    • Toolkits - 工具包
    • Agents - 代理
    • Callbacks - 回调
  • Techniques - 技术
    • Streaming - 流式处理
    • Structured output - 结构化输出
    • Retrieval - 检索
    • Text splitting - 文本分割
    • Evaluation - 评估
    • Tracing - 跟踪

Runnable interface
LangChain 引入了一个标准接口 “Runnable” 协议,旨在简化自定义链的创建和调用过程。该协议已在多个 LangChain 组件中实现,包括聊天模型、LLM、输出解析器、检索器和提示模板等。通过统一的接口,开发者可以更轻松地定义和调用自定义链。

Runnable 协议包含以下标准接口方法:

  • stream:以流的形式返回响应的块。
  • invoke:对单个输入调用链。
  • batch:对输入列表调用链。
组件 输入类型 输出类型
Prompt Dictionary PromptValue
ChatModel 单字符串、聊天消息列表或 PromptValue ChatMessage
LLM 单字符串、聊天消息列表或 PromptValue String
OutputParser LLM 或 ChatModel 的输出 取决于解析器
Retriever 单字符串 文档列表
Tool 单字符串或字典(取决于工具) 取决于工具

简单试用

(1) 模型选择

使用本地模型,可以通过 LM Studio、Ollama 等方式下载

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio", max_tokens=256, temperature=0.0, top_p=0.9)

llm.invoke("你好")
AIMessage(content='你好!很高兴能为你提供帮助。有什么问题或者需要我做的事情吗?', response_metadata={'token_usage': {'completion_tokens': 16, 'prompt_tokens': 24, 'total_tokens': 40}, 'model_name': 'Qwen/Qwen1.5-7B-Chat-GGUF/qwen1_5-7b-chat-q5_k_m.gguf', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-16d51193-ab6e-4462-bb18-9818b88962ec-0', usage_metadata={'input_tokens': 24, 'output_tokens': 16, 'total_tokens': 40})

AIMessage.content 即为返回内容
————————————————————
使用 OpenAI API 访问云端模型,例如通过 OpenAI阿里云DashScope模型服务灵积 申请

from langchain_openai import ChatOpenAI

qwen = ChatOpenAI(model="qwen-turbo", api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", max_tokens=256, temperature=0.0, top_p=0.9)

qwen.invoke("你好")
AIMessage(content='你好!有什么我可以帮助你的吗?', response_metadata={'token_usage': {'completion_tokens': 8, 'prompt_tokens': 9, 'total_tokens': 17}, 'model_name': 'qwen-turbo', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-d9ef21c6-2b64-4982-964a-d55b651865a2-0', usage_metadata={'input_tokens': 9, 'output_tokens': 8, 'total_tokens': 17})

————————————————————
也可以直接调用 HuggingFace 上的模型

from langchain_community.llms.huggingface_hub import HuggingFaceHub

model = HuggingFaceHub(repo_id="openai-community/gpt2", task="text-generation", huggingfacehub_api_token="hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

response = model.generate(["Hello, how are you?"])
print(response)
generations=[[Generation(text="Hello, how are you?\n\nI'm a little bit of a nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd. I'm a big nerd")]] llm_output=None run=[RunInfo(run_id=UUID('0e4e40a7-d8ea-4a4b-8194-58c45bda66a5'))]

==================================

(2) 基础操作

使用提示词模板 PromptTemplate

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful assistant that translates {input_language} to {output_language}."),
        ("user", "{input}")
])

chain = prompt | llm # 简单组合链,串联可运行对象

chain.invoke({
   "input": "I love pr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值