LangChain实战教程(二):手把手搭建命令行 AI 聊天

85 阅读2分钟

你好,我是方可乐。
一个正在深耕AI编程的30+的AI应用开发工程师。
实战过多个AI应用开发框架,自主开发过多个AI应用产品

今天我们来聊聊,用langchain调用大模型,如何持续实时交互。

 

昨天我们跑通了第一次调用,输出就像“演示版”,一问一答,但一次性结束。今天,我们来进行连续的对话。

就像我们平时用豆包或者DeepSeek这些AI 聊天一样,持续提问,随问随答。

在昨天原来的目录上,我们新建两个文件。老规矩,一个原生版本,一个langchain版本。

原生版本,新建文件02_talk_with_deepseek.py

from openai import OpenAI
from dotenv import load_dotenv
import os

# 加载环境变量
load_dotenv()

client = OpenAI(
    api_key=os.getenv("deepseek_api_key"),
    base_url="https://api.deepseek.com"
)

print("=== 欢迎进入 AI 命令行聊天 ===")
print("输入 'exit' 退出聊天")

# 初始化对话历史,只包含系统消息
messages = [
    {"role""system""content""你是一个聪明的 AI 助手,会回答用户的问题。"}
]

while True:
    user_input = input("\n你:")
    if user_input.lower() == "exit":
        print("聊天结束,再见!")
        break

    # 添加用户消息到对话历史
    messages.append({"role""user""content": user_input})

    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=messages,
        stream=False
    )

    answer = response.choices[0].message.content
    # 添加AI回复到对话历史
    messages.append({"role""assistant""content": answer})
    print(f"AI:{answer}")

langchain版本,新建文件02_talk_with_deepseek_langchain.py

from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
from dotenv import load_dotenv
import os

# 加载 .env 文件
load_dotenv()

# 初始化 LangChain LLM
llm = ChatOpenAI(
    api_key=os.getenv("deepseek_api_key"),
    base_url="https://api.deepseek.com/v1",
    model="deepseek-chat",
    temperature=0.7
)

print("=== 欢迎进入 LangChain AI 命令行聊天 ===")
print("输入 'exit' 退出聊天")

# 初始化对话历史,只包含系统消息
messages = [
    SystemMessage(content="你是一个聪明的 AI 助手,会回答用户的问题。")
]

while True:
    user_input = input("\n你:")
    if user_input.lower() == "exit":
        print("聊天结束,再见!")
        break

    # 添加用户消息到对话历史
    messages.append(HumanMessage(content=user_input))

    response = llm.invoke(messages)
    # 添加AI回复到对话历史
    messages.append(response)
    print(f"AI:{response.content}")

我们使用while True来激活一个循环,然后通过input("\n你:")来进行连续的输入。

通过在循环中持续填入增量的历史消息到message对象后调用大模型,并且打印大模型的回复,来达到持续交互的目的。

Langchain中使用 messages.append(HumanMessage(content=user_input)),用HumanMessage对象来包装用户输入,看起来更加整洁。

当我们的代码复杂后,有更高的可读性。

这是最终代码运行效果,是不是很简单就跑起来了?

图片  

对AI应用开发感兴趣的同学,欢迎加微信申请入群交流学习。

想要学习AI应用开发的同学,可以参照我的代码跑起来,举一反三,一天一个脚印的进步,我相信,会足够坚实。

如果你也想了解AI应用开发到底是什么,如果你也在考虑转型但还在犹豫,
那就跟着我的记录,一起探索。

继续折腾中,有问题随时交流 🤝
微信号:ThinkFun666

图片