langchain源码阅读系列(三)之Chain模块

本文是LangChain源码阅读系列的第三部分,重点介绍Chain模块。Chain定义了一组组件调用顺序,简化了复杂AI应用的实现。文中详细讲解了如何从LangChainHub加载链,运行LLM链的多种方式,以及通用工具链和专门用途链的实现。此外,还阐述了合并文档的链在对话场景、数据库问答场景和总结场景的应用。
摘要由CSDN通过智能技术生成

原文首发于博客文章langchain源码阅读

本节是langchian源码阅读系列第三篇,下面进入Chain模块👇:

LLM 应用构建实践笔记

我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
LangChain编程从入门到实践

Chain链定义

链定义为对组件的一系列调用,也可以包括其他链,这种在链中将组件组合在一起的想法很简单但功能强大,极大地简化了复杂应用程序的实现并使其更加模块化,这反过来又使调试、维护和改进应用程序变得更加容易。
Chain基类是所有chain对象的基本入口,与用户程序交互,处理用户的输入,准备其他模块的输入,提供内存能力,chain的回调能力,其他所有的 Chain 类都继承自这个基类,并根据需要实现特定的功能。

class Chain(BaseModel, ABC):
    memory: BaseMemory
    callbacks: Callbacks

    def __call__(
        self,
        inputs: Any,
        return_only_outputs: bool = False,
        callbacks: Callbacks = None,
    ) -> Dict[str, Any]:
        ...

实现自定义链

from __future__ import annotations

from typing import Any, Dict, List, Optional

from pydantic import Extra

from langchain.base_language import BaseLanguageModel
from langchain.callbacks.manager import (
    AsyncCallbackManagerForChainRun,
    CallbackManagerForChainRun,
)
from langchain.chains.base import Chain
from langchain.prompts.base import BasePromptTemplate


class MyCustomChain(Chain):
    prompt: BasePromptTemplate
    llm: BaseLanguageModel
    output_key: str = "text"

    class Config:
        extra = Extra.forbid
        arbitrary_types_allowed = True

    @property
    def input_keys(self) -> List[str]:
        """pompt中的动态变量
        """
        return self.prompt.input_variables

    @property
    def output_keys(self) -> List[str]:
        """允许直接输出的动态变量.
        """
        return [self.output_key]
    # 同步调用
    def _call(
        self,
        inputs: Dict[str, Any],
        run_manager: Optional[CallbackManagerForChainRun] = None,
    ) -> Dict[str, str]:
        # 下面是一个自定义逻辑实现
        prompt_value = self.prompt.format_prompt(**inputs)
        # 调用一个语言模型或另一个链时,传递一个回调处理。这样内部运行可以通过这个回调(进行逻辑处理)。
        response = self.llm.generate_prompt(
            [prompt_value], callbacks=run_manager.get_child() if run_manager else None
        )
        # 回调出发时的日志输出
        if run_manager:
            run_manager.on_text("Log something about this run")

        return {
   self.output_key: response.generations[0][0].text}
    # 异步调用
    async def _acall(
        self,
        inputs: Dict[str<
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
langchain源码架构主要包括以下几个模块: 1. 前端模块:前端模块是用户与系统之间的界面层,负责接收用户的输入和展示系统的输出。它使用Web技术来实现,包括HTML、CSS和JavaScript等,通过与后端通信,将用户的请求发送到后端进行处理并将结果展示给用户。 2. 后端模块:后端模块是整个系统的核心部分,负责处理前端发送过来的请求,并返回相应的结果。它包括多个子模块,如用户管理模块、语言处理模块、翻译模块等。后端模块使用Java语言开发,采用Spring框架来实现,通过接收前端的请求,调用相应的子模块进行处理,并将结果返回给前端。 3. 数据库模块:数据库模块负责存储系统中的数据,包括用户信息、语言库、翻译记录等。它采用关系型数据库来存储数据,如MySQL等。后端模块与数据库模块通过读写数据库来实现数据的持久化。 4. 语言处理模块:语言处理模块是整个系统的核心功能模块,负责接收用户输入的文本,进行语言处理和翻译。它使用自然语言处理技术来进行语言识别、分词、词性标注、句法分析等处理,并调用翻译模块进行翻译。语言处理模块采用Python语言开发,使用相关的自然语言处理库,如NLTK、Stanford NLP等。 5. 翻译模块:翻译模块是用来实现文本的翻译功能的模块,它根据用户的输入和系统的语言处理结果,进行适当的翻译处理。翻译模块采用机器翻译技术,包括统计机器翻译和神经网络机器翻译等。它使用训练好的翻译模型来进行翻译,并将结果返回给语言处理模块。 总的来说,langchain源码架构是一个基于Java和Python开发的多模块系统,通过前后端的交互和与数据库的读写来实现用户的语言处理和翻译需求。该架构采用了先进的自然语言处理和机器翻译技术,为用户提供高质量的语言处理和翻译服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值