langchain实战-从0到1搭建ai聊天机器人

介绍

当前,人工智能大模型公司如雨后春笋般迅速涌现,例如 OpenAI、文心一言、通义千问等,它们提供了成熟的 API 调用服务。然而,随之而来的是不同公司的繁琐协议接入过程,这让许多开发者感到头疼不已。有没有一种统一的工具,能够让我们一次性接入所有公司的 API 协议,并且基于它们的底层能力封装出各种酷炫功能呢?今天,这样的工具终于来了——Langchain,它以坚实的步伐走来,为我们带来了极大的便利和创新。

Langchain 是一个专为适配各家大模型 API 而生的框架,不仅如此,它还封装了各种重要模块,使得大家能够轻松搭建出各种令人惊叹的人工智能应用。以下代码基于 langchain 2.0 版本实现

模块介绍:

  • Model: 这一模块的重要性不言而喻。Langchain 的 Model 模块致力于适配各大模型公司的接口协议,使得接入过程更加简单和高效。不再需要为每个公司的特殊协议而烦恼,Langchain 帮助您一次性搞定。

  • Prompt: 提示词的运用是大模型输出准确性的关键。Langchain 的 Prompt 模块不仅让大模型能更准确地输出我们期望的回答,还衍生出了“提示工程”。建议在使用大模型之前先查看提示工程,以获得更好的结果和体验。

  • History: 大模型本身并不具备记忆功能,这带来了一个看似矛盾的问题:为什么像 ChatGPT 这样的模型能够联系到我们之前的提问并给出相关回复呢?Langchain 的 History 模块揭示了这个谜团的解答。其实,实现原理非常简单,只需将你的上一个提问一并发送给大模型即可。当然,实际实现中还涉及一些问题,比如如何标识同一轮对话、信息存储位置、处理过多文本等等。因此,需要自行实现部分逻辑,但 Langchain 为您提供了思路和基础。

言归正传,让我们开始实战代码,探索 Langchain 带来的无限可能吧!

快速开始

1. 先安装依赖,以openai为例

pip install langchain

pip install -qU langchain-openai

2. 初始化model

import os

os.environ["OPENAI_API_KEY"] = "sk-xxx"

from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-3.5-turbo")

3. 发起请求

from langchain_core.messages import HumanMessage

response = model.invoke([HumanMessage(content="你好")])

response.content

4.得到回答

'你好!有什么可以帮助你的吗?'

🎉 恭喜你,你已经可以成功使用langchain调用大模型api了

加入历史记忆实现连续对话

经过以上步骤,你已经可以跟大模型进行聊天,但是有个问题,现在他是不会记忆上一轮的回答的,你上一句问他东西,他转头就忘了,那该怎么办呢?那就给他加上历史记忆好了

# 没有 history memory

from langchain_core.messages import HumanMessage

question_1 = "你好,我叫小明"
result_1 = model.invoke([HumanMessage(content=f"{question_1}")])
print(result_1.content)

question_2 = "我叫什么名字"
result_2 = model.invoke([HumanMessage(content=f"{question_2}")])
print(result_2.content)

返回结果

你好,小明!有什么可以帮助你的吗?
抱歉,我无法回答这个问题,因为我不知道您的名字。您可以告诉我您的名字吗?我会很高兴称呼您的名字。

开头也说了,大模型是没有记忆功能的,目前业界的实现方式都是通过各自实现存储,在聊天中将上一轮的问答也一起发送过去,让大模型有了“记忆”,那最简单的方法就是用个list存储,然后每次回答都带上去就好了

# 简单实现 history memory

from langchain_core.messages import HumanMessage

store = []

question_1 = "你好,我叫小明"
result_1 = model.invoke([HumanMessage(content=f"{question_1}")])
print(result_1.content)

store.append({"human": question_1, "ai": result_1.content})

question_2 = "我叫什么名字"
result_2 = model.invoke([HumanMessage(content=f"history: {store} {question_2} ")])
print(result_2.content)

返回结果:

你好,小明!有什么可以帮助你的吗?
你的名字是小明。有什么可以帮助你的吗?如果有任何问题,随时问我吧!

神奇的事情发生了,大模型有“记忆”了 

当然,langchain也为我们提供了方便的实现,让我们不用显式的写history

pip install langchain_community
# 使用官方模块实现

from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.chat_history import BaseChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

store = {}

def get_session_history(session_id: str) -> BaseChatMessageHistory:
    if session_id not in store:
        store[session_id] = ChatMessageHistory()
    return store[session_id]


with_message_history = RunnableWithMessageHistory(model, get_session_history)

config = {"configurable": {"session_id": "abc2"}}

question_1 = "你好,我叫小明"
result_1 = with_message_history.invoke([HumanMessage(content=f"{question_1}")],config=config)
print(result_1.content)

question_2 = "我叫什么名字"
result_2 = with_message_history.invoke([HumanMessage(content=f"{question_2}")],config=config)
print(result_2.content)
你好小明,有什么可以帮助你的吗?
你告诉我你叫小明。

同时langchain还提供了更多类型的memory实现,让我们可以使用redis去存储历史记录,这个就留给大家自己实现了  Redis | 🦜️🔗 LangChain

加入提示词prompt格式化回答

在上述的实现中,我们的做法就是简单的字符串拼接发送给大模型,使用prompt可以让我们更好的格式化我们的输入

# 加入prompt

from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.chat_history import BaseChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

store = {}

def get_session_history(session_id: str) -> BaseChatMessageHistory:
    if session_id not in store:
        store[session_id] = ChatMessageHistory()
    return store[session_id]

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "在每一句话结尾都加上 回复完毕",
        ),
        MessagesPlaceholder(variable_name="messages"),
    ]
)

chain = prompt | model

with_message_history = RunnableWithMessageHistory(chain, get_session_history)

config = {"configurable": {"session_id": "abc2"}}

question_1 = "你好,我叫小明"
result_1 = with_message_history.invoke([HumanMessage(content=f"{question_1}")],config=config)
print(result_1.content)

question_2 = "我叫什么名字"
result_2 = with_message_history.invoke([HumanMessage(content=f"{question_2}")],config=config)
print(result_2.content)
你好,小明。有什么可以帮助你的吗?回复完毕
您的名字是小明。回复完毕

🎉 这样你就完成了一个能连续对话的ai机器人啦

  • 34
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: csdn人工智能聊天机器人是一个基于人工智能技术而开发的交互式聊天系统。它具有多种功能和特点,可以与用户进行自然语言的对话,并根据用户的需求提供相应的答案和解决方案。 首先,csdn人工智能聊天机器人通过自然语言处理和机器学习技术,能够理解和识别用户的意图和问题。它能够主动提问用户,并根据用户的回答进行进一步的追问和分析,以便给出更准确的答案。同时,它还能理解多种中文口语和表达方式,使得与用户的交流更加自然和流畅。 其次,csdn人工智能聊天机器人具有广泛的知识和信息库。它可以从csdn社区中提取和整理大量的编程和技术相关的知识,并将其应用于对用户问题的解答。无论是关于编程语言、算法、框架还是其他技术领域的问题,它都能够给出专业的回答和建议。 此外,csdn人工智能聊天机器人还可以根据用户的兴趣和需求进行个性化的推荐。它能够分析用户过去的提问和浏览记录,了解用户的偏好和需求,从而为用户提供更加精准和有效的建议和指导。 最后,csdn人工智能聊天机器人具有不断学习和优化的能力。它能够根据用户的反馈和评价不断改进自身的回答准确度和响应速度,以提供更好的用户体验。 总之,csdn人工智能聊天机器人通过深度学习和自然语言处理等技术,能够与用户进行自然、智能的对话,提供编程和技术方面的解答和建议。它将极大地方便程序员和技术爱好者们,提高他们的学习和工作效率。 ### 回答2: CSDN人工智能聊天机器人是一种基于人工智能技术开发的聊天机器人,旨在为用户提供智能化、个性化的对话服务。它利用自然语言处理、机器学习和数据挖掘等技术,能够理解用户的语义和意图,并做出相应的回答和建议。 首先,CSDN人工智能聊天机器人可以为用户提供技术支持和问题解答。无论是在开发过程中遇到的困难,还是对编程语言、框架、算法等技术问题的咨询,用户都可以直接向机器人提问,得到相应的答案和指导,提高开发效率和解决问题的能力。 其次,CSDN人工智能聊天机器人还能够为用户提供个性化的学习资料和推荐。根据用户的兴趣和需求,机器人可以推荐相关的技术文章、学习教程、视频等资源,帮助用户进行知识学习和技能提升。 同时,CSDN人工智能聊天机器人还具备友好互动的特点。它能够根据用户的喜好和个性,进行情感分析和智能回复,与用户进行自然、流畅的对话。用户可以与机器人闲聊,分享工作和生活中的点滴,获得情感支持和鼓励。 最后,CSDN人工智能聊天机器人还在不断学习和进化中。通过与大量用户的互动和反馈,机器人能够不断提高自身的回答准确性和智能水平,为用户提供更优质的服务体验。 总的来说,CSDN人工智能聊天机器人不仅是一个技术助手,更是一个知识导师和情感伙伴,为用户提供技术支持、学习资料、友好互动等多方面的服务,助力用户在技术领域的成长和发展。 ### 回答3: CSDN人工智能聊天机器人是一个基于人工智能和自然语言处理技术开发的聊天机器人。它通过对海量的文本数据进行深度学习和模型训练,能够理解和分析用户提问的意图,以自然流畅的语言与用户进行对话交流。 该聊天机器人具有很强的智能问答能力,能够回答各种领域的问题,例如编程、算法、人工智能、大数据等。它可以为用户提供准确、全面的解答,并能根据用户的需求进行进一步的深入探讨。 CSDN人工智能聊天机器人还具有个性化的服务功能。它可以根据用户的喜好和兴趣进行个性化推荐,提供相关的技术文章、教程和学习资源。用户还可以通过与机器人的对话交流,获取更多的学习资料和指导,提高自己的编程和技术水平。 此外,CSDN人工智能聊天机器人还具备辨识用户情绪的能力。它可以通过分析用户的语言和表达方式,判断用户的情绪状态,并做出相应的回应。这种情感分析功能能够更好地理解用户的需求并提供有针对性的建议和支持。 CSDN人工智能聊天机器人是一个智能、高效、便捷的交流工具。它不仅能够解答用户的问题,还能够引导用户进行深入的学习和研究。在技术社区中,它为用户提供了一个互动交流的平台,促进了技术的传播和共享。通过与CSDN人工智能聊天机器人的对话,用户能够更加便捷地获取所需的信息和资源,提高自己的技术水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值