AI创想

标题: LangChain基础使用教程 [打印本页]

作者: 邓金婵9    时间: 12 小时前
标题: LangChain基础使用教程
作者:CSDN博客
什么是LangChain?

LangChain本质上是一个开源的框架,提供一些工具、接口帮你快速创建由LLM和聊天模型支持的应用程序。所以说它本身只是帮你调整大模型构建特定功能的应用,所以你还需要有大模型,一般我们都使用其他公司的大模型api,如OpenAI,Gemini等。
LangChain简化了LLM应用程序生命周期的每个阶段:
(, 下载次数: 0)


基础使用教程

一、拉取langchain
  1. pip install langchain
复制代码
二、langchain简单使用

1、引入大模型
  1. import os
  2. from langchain_openai import ChatOpenAI
  3. os.environ["OPENAI_API_KEY"] = "API-key"
  4. llm = ChatOpenAI(
  5.     base_url="https://api.hunyuan.cloud.tencent.com/v1",
  6.     model="hunyuan-turbos-latest",
  7.     temperature=0.5
  8. )
复制代码
参数解析:
引申:
openAI国内用不了,使用腾讯混元大模型代替(免费):console.cloud.tencent.com
2、简单调用大模型
  1. from langchain_core.messages import HumanMessage, SystemMessage
  2. messages = [
  3.     SystemMessage(content="Translate the following from English into China"),
  4.     HumanMessage(content="What is the capital of France?")
  5. ]
  6. result = llm.invoke(messages)
  7. print(result.content)
复制代码
解析:
引申:
输出解析器
文本效果等同于result.content
  1. from langchain_core.output_parsers import StrOutputParser
  2. parser = StrOutputParser()
  3. result = llm.invoke(messages)
  4. response = parser.invoke(result)
  5. print(response)
复制代码
3、模板处理
  1. from langchain_core.messages import HumanMessage
  2. from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
  3. prompt = ChatPromptTemplate.from_messages(
  4.     [
  5.         (
  6.             "system",
  7.             "你是一个翻译机器人,你需要识别语言,并且将其翻译为{language}。"
  8.         ),
  9.         MessagesPlaceholder(variable_name="messages")
  10.     ]
  11. )
  12. resul = prompt.invoke(
  13.     {
  14.         "messages": [HumanMessage(content="你好!我是鲍勃")],
  15.         "language": "English"
  16.     }
  17. )
  18. response = llm.invoke(resul.to_messages())
  19. print(response.content)
复制代码
解析:
4、LCEL(组件连接)
  1. chain = prompt_template | llm | parser
  2. chain.invoke({"language": "italian", "text": "hi"})
复制代码
解析:
三、langchain基础使用

1、会话记忆(历史消息)

让我们确保安装 langchain-community,因为我们将使用其中的集成来存储消息历史记录。
定义历史消息存储
  1. from langchain_core.chat_history import (
  2.     BaseChatMessageHistory,
  3.     InMemoryChatMessageHistory,
  4. )
  5. from langchain_core.runnables.history import RunnableWithMessageHistory
  6. store = {}
  7. def get_session_history(session_id: str) -> BaseChatMessageHistory:
  8.     if session_id not in store:
  9.         store[session_id] = InMemoryChatMessageHistory()
  10.     return store[session_id]
  11. with_message_history = RunnableWithMessageHistory(llm, get_session_history)
复制代码
解析:
调用大模型
  1. config = {"configurable": {"session_id": "abc2"}}
  2. response = with_message_history.invoke(
  3.     [HumanMessage(content="Hi! I'm Bob")],
  4.     config=config,
  5. )
  6. response.content
复制代码
解析:
设置历史消息上下文长度
  1. from langchain_core.messages import SystemMessage,HumanMessage,AIMessage, trim_messages
  2. # 模拟token计算方法
  3. def simple_token_counter(messages):
  4.     # 假设每个空格分隔的词算一个 token
  5.     return sum(len(msg.content.split()) for msg in messages)
  6. # 2、设置上下文截取token的大小
  7. trimmer = trim_messages(
  8.     max_tokens=20,
  9.      # 已修剪消息的最大令牌计数
  10.     strategy="last",
  11.     # 修剪策略。
  12.     # - “first”:保留消息的前 <= n_count 个令牌。
  13.     # - “last”:保留消息的最后 <= n_count 个令牌。
  14.     # 默认值为 “last”。
  15.     token_counter=simple_token_counter,
  16.     # 用于对 BaseMessage 或 BaseMessage 列表中的令牌进行计数的函数或 llm
  17.     include_system=True,
  18.     # 如果索引 0 处有 SystemMessage,是否保留 SystemMessage。
  19.     # 仅当 strategy=“last” 时才应指定。默认值为 False。
  20.     allow_partial=False,
  21.     #如果只能包含消息的一部分,是否拆分消息。如果 strategy=“last” 则包含消息的最后部分内容。
  22.     # 如果 strategy=“first” 则包含消息的第一个部分内容。默认值为 False。
  23.     start_on="human",
  24.     # 要开始的消息类型。仅当 strategy=“last” 的 intent 函数。
  25.     # 如果指定,则忽略此类型首次出现之前的每条消息。这是在我们将初始消息修剪到最后一个 max_tokens 后完成的。
  26.     # 如果 include_system=True,则不适用于索引 0 处的 SystemMessage。
  27.     # 可以指定为字符串名称(例如 “system”、“human”、“ai” 等)或 BaseMessage 类(例如 SystemMessage、HumanMessage、AIMessage 等)。
  28.     # 可以是单个类型或类型列表。默认值为 None。
  29. )
  30. ...
  31. from langchain_core.runnables import RunnablePassthrough
  32. chain = (
  33.     RunnablePassthrough.assign(messages=itemgetter("messages") | trimmer)
  34.     #  itemgetter 用于获取对象的哪些位置的数据,参数即为代表位置的序号值。
  35.     | prompt
  36.     | llm
  37. )
复制代码
解析:
2、模型流式返回
  1. prmopt = ChatPromptTemplate.from_messages(
  2.     [
  3.         (
  4.             "system",
  5.             "你是一个聊天助手,你的输出语言是{language}"
  6.         ),
  7.         MessagesPlaceholder(variable_name="messages")
  8.     ]
  9.    
  10. )
  11. chain = prmopt | llm
  12. with_message_history = RunnableWithMessageHistory(
  13.     chain,
  14.     get_session_history,
  15.     input_messages_key="messages", # 由于输入中有多个 key,我们需要指定正确的 key 来保存聊天记录
  16. )
  17. for r in with_message_history.stream(
  18.     {
  19.         "messages": [HumanMessage(content="hi! I'm todd. tell me a joke")],
  20.         "language": "China",
  21.     },
  22.     config=config
  23. ):
  24.     print(r.content, end="|")
复制代码
原文地址:https://blog.csdn.net/qq_56796761/article/details/149279789




欢迎光临 AI创想 (https://www.llms-ai.com/) Powered by Discuz! X3.4