1.LangChain 介绍

LangChain是⼀个强⼤的⽤于开发⼤模型应⽤程序的框架,为开发者提供了丰富的⼯具和组件,开发者可以用LangChain将语⾔大模型与其他数据源和工具集成,开发出能够处理各种任务的智能应用,如问答系统、聊天机器⼈、文本生成等。

2.LangChain核心模块介绍

  • 模型(Models)

在LangChain中,模型接⼝是与⼤语⾔模型进⾏交互的桥梁。它⽀持多种类型的模型,包括语⾔大模型(LLMs)和聊天模型(ChatModels)

  • 提示模板(PromptTemplates)

提示模板用于定义输⼊给语⾔模型的提示信息,帮助模型⽣成更符合预期的输出。它可以包含变量,通过填充这些变量来⽣成具体的提示。

  • 链(Chains)

链是LangChain中⼀个重要的概念,它将多个组件组合在⼀起,按照⼀定的顺序执⾏,以实现更复杂的任务。常⻅的链类型包括顺序链(SequentialChain)、并⾏链等。

  • ⼯具(Tools)

⼯具是LangChain中⽤于执⾏特定任务的组件,如搜索引擎⼯具、数据库查询⼯具等。开发者可以将⼯具集成到链中,以扩展应⽤的功能。

  • 记忆(Memory)

在对话式应⽤中,记忆组件⽤于保存和管理对话的历史信息,使模型能够根据上下⽂进⾏更连贯的回复。LangChain提供了多种类型的记忆,如短期记忆、⻓期记忆等。

3.LangChain 安装

Python版本:建议使⽤Python3.7及以上版本。

pip install langchain
pip install langchain-core
pip install langchain-openai

 

4.LangChain 实战

4.1 基本调用:单轮问答机器人

代码:

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
 openai_api_base="https://ark.cn-beijing.volces.com/api/v3",
 openai_api_key="f906c9xx-xxxx-xxxx-xxxx-898fe71967xx",  #自己的apikey
 temperature=0.7,  #随机性0-1,0 没有随机性,1 随机性最高
 max_tokens=10240,
 model_name="doubao-1.5-pro-256k-250115")

def basic_demo():
 result = llm.invoke([
 SystemMessage(content="你是⼀个很会安慰⼈的⼼理学⼤师"),
 HumanMessage(content="今天我迟到了")
 ])
 print(result)


if __name__ == '__main__':
    basic_demo()

结果

知识点

SystemMessage ⽤于设置系统级别的提示信息

HumanMessage ⽤于表⽰⽤⼾的输⼊

model_name的获取方式:

 

 

4.2 内存记忆:多轮问答机器人

代码

from langchain.chains.conversation.base import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
 openai_api_base="https://ark.cn-beijing.volces.com/api/v3",
 openai_api_key="f906c9xx-xxxx-xxxx-xxxx-898fe71967xx",  #自己的apikey
 temperature=0.7,
 max_tokens=10240,
 model_name="doubao-1.5-pro-256k-250115")


def multi_chat_demo():
 # 创建对话链,包含内存功能
 memory = ConversationBufferMemory()  #内存,记忆
 conversation = ConversationChain(llm=llm,memory=memory)  
 while True:
  user_input = input("用户: ")
  if user_input.lower() in ['退出', 'exit', 'quit']:
   print("机器⼈小E: 再⻅!")
   break
  # 获取机器⼈回复
  response = conversation.predict(input=user_input)
  print(f"机器⼈小E: {response}")



if __name__ == '__main__':
    multi_chat_demo()

结果

 

4.3 单链调用

代码:

from langchain.chains.llm import LLMChain
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
 openai_api_base="https://ark.cn-beijing.volces.com/api/v3",
 openai_api_key="f906c9xx-xxxx-xxxx-xxxx-898fe71967xx",  #自己的apikey
 temperature=0.7,
 max_tokens=10240,
 model_name="doubao-1.5-pro-256k-250115")


def simple_chain_demo():
    ## 定义一个提示词模板
    prompt = PromptTemplate(input_variables=["job", "type"],
                            template="""
                            你是⼀个⽂档编写专家,帮我⽣成⼀个{job}岗位{type}⽂档,不超过500字
                            """
                    )
    ## 定义一个链(节点)
    chain = LLMChain(llm=llm, prompt=prompt, verbose=True, output_key="report")
    ## 调用链
    result = chain.invoke({'job': '软件测试', 'type': '测试报告'})
    print(result)

if __name__ == '__main__':
    simple_chain_demo()

结果:

知识点

PromptTemplate:提示词模板

input_variables:输入参数

template:提示词

output_key:输出

 

4.4 顺序链调用

代码

from langchain.chains.llm import LLMChain
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain.chains.sequential import SequentialChain

llm = ChatOpenAI(
 openai_api_base="https://ark.cn-beijing.volces.com/api/v3",
 openai_api_key="f906c9xx-xxxx-xxxx-xxxx-898fe71967xx",  #自己的apikey
 temperature=0.7,
 max_tokens=10240,
 model_name="doubao-1.5-pro-256k-250115")




def sequential_chain_demo():
    ## 定义第一个节点的提示词模板
    prompt_1 = PromptTemplate(input_variables=["product"],
                            template="""
                               你是⼀个资深产品经理,帮我生成{product}的需求文档,不超过500字
                               """
                            )
    ## 定义第一个节点(工作流)
    chain = LLMChain(llm=llm, prompt=prompt_1, verbose=True, output_key="requirement_document")

    ## 定义第二个节点的提示词模板
    ## 输入是上一个节点的输出
    prompt_2 = PromptTemplate(input_variables=["requirement_document"],
                              template="""
                                   你是⼀个资深软件测试工程师,请根据产品提供的{requirement_document}生成测试点
                                   """
                              )
    ## 定义第二个节点(工作流)
    chain_2 = LLMChain(llm=llm, prompt=prompt_2, verbose=True, output_key="testpoints")

    ##创建一个顺序链,把两个节点按照顺序组装
    all_chains = SequentialChain(
     chains=[chain, chain_2],
     input_variables=["product"],
     output_variables=[ "requirement_document","testpoints"],
     verbose=True
     )

    ##运行顺序链
    result = all_chains.invoke({'product': "容量为500ml的玻璃水杯"})
    print(result)



if __name__ == '__main__':
    sequential_chain_demo()

结果:

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐