大模型开发框架—LangChain问答机器人、链调用实战详细操作
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()
结果:

更多推荐


所有评论(0)