跳到主要内容

简单问答机器人

4.1 多轮对话机器人

from langchain_deepseek import ChatDeepSeek
from langchain.messages import HumanMessage, AIMessage, SystemMessage

# 1️⃣ 初始化模型(LangChain 1.0 接口)
model = load_chat_model(
model="gpt-4o-mini",
provider="openai",
base_url="https://xiaoai.plus/v1",
api_key="sk-xxx",
)

# 2️⃣ 初始化系统提示词(System Prompt)
system_message = SystemMessage(
content="你叫小智,是一名乐于助人的智能助手。请在对话中保持温和、有耐心的语气。"
)

# 3️⃣ 初始化消息历史
messages = [system_message]

print("🔹 输入 exit 退出对话\n")

# 4️⃣ 主循环(支持多轮对话 + 流式输出)
while True:
user_input = input("👤 你:")
if user_input.lower() in {"exit", "quit"}:
print("🧩 对话结束,再见!")
break

# 追加用户消息
messages.append(HumanMessage(content=user_input))

# 实时输出模型生成内容
print("🤖 小智:", end="", flush=True)
full_reply = ""

# ✅ LangChain 1.0 标准写法:流式输出
for chunk in model.stream(messages):
if chunk.content:
print(chunk.content, end="", flush=True)
full_reply += chunk.content

print("\n" + "-" * 40) # 分隔线

# 追加 AI 回复消息
messages.append(AIMessage(content=full_reply))

# 保持消息长度(只保留最近50轮)
messages = messages[-50:]

4.2 Gradio 界面搭建

安装 Gradio

pip install gradio

Gradio 聊天机器人实现

import gradio as gr
from langchain_deepseek import ChatDeepSeek
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

# ──────────────────────────────────────────────
# 1. 初始化模型与系统设定
# ──────────────────────────────────────────────
model = ChatDeepSeek(model="deepseek-chat")

system_message = SystemMessage(
content="你叫小智,是一名乐于助人的智能助手。请在对话中保持友好、有耐心、温和的语气。"
)

# ──────────────────────────────────────────────
# 2. 定义 Gradio 界面
# ──────────────────────────────────────────────
CSS = """
.main-container {max-width: 1200px; margin: 0 auto; padding: 20px;}
.header-text {text-align: center; margin-bottom: 20px;}
"""


def create_chatbot() -> gr.Blocks:
with gr.Blocks(title="DeepSeek Chat", css=CSS) as demo:
with gr.Column(elem_classes=["main-container"]):
gr.Markdown("# 🤖 LangChain 1.0 × DeepSeek Chatbot", elem_classes=["header-text"])
gr.Markdown("基于 LangChain 1.0 标准接口的流式对话机器人", elem_classes=["header-text"])

chatbot = gr.Chatbot(
height=500,
show_copy_button=True,
avatar_images=(
"https://cdn.jsdelivr.net/gh/twitter/twemoji@v14.0.2/assets/72x72/1f464.png",
"https://cdn.jsdelivr.net/gh/twitter/twemoji@v14.0.2/assets/72x72/1f916.png",
),
)
msg = gr.Textbox(placeholder="请输入您的问题...", container=False, scale=7)
submit = gr.Button("发送", scale=1, variant="primary")
clear = gr.Button("清空", scale=1)

# 状态:保存消息历史(LangChain Message 对象)
state = gr.State([])

# ─────────────── 主响应函数(流式输出) ───────────────
def respond(user_msg: str, chat_hist: list, messages_list: list):

# 1️⃣ 输入为空则直接返回
if not user_msg.strip():
yield "", chat_hist, messages_list
return

# 2️⃣ 构建消息上下文(包括系统提示)
if not messages_list:
messages_list = [system_message]

messages_list.append(HumanMessage(content=user_msg))

# 3️⃣ 添加用户消息到聊天历史
chat_hist = chat_hist + [(user_msg, "")]

# 4️⃣ 流式生成模型回复
partial = ""
for chunk in model.stream(messages_list):
if chunk.content:
partial += chunk.content
# 每次更新最后一条消息
chat_hist[-1] = (user_msg, partial)
# 立即 yield,让 UI 实时更新
yield "", chat_hist, messages_list

# 5️⃣ 保存完整 AI 回复并截断历史(保留50轮)
messages_list.append(AIMessage(content=partial))
messages_list = messages_list[-50:]

# 6️⃣ 最后一次 yield 确保状态同步
yield "", chat_hist, messages_list

# ─────────────── 清空对话函数 ───────────────
def clear_history():
return "", [], []

# ─────────────── Gradio 事件绑定 ───────────────
msg.submit(respond, [msg, chatbot, state], [msg, chatbot, state])
submit.click(respond, [msg, chatbot, state], [msg, chatbot, state])
clear.click(clear_history, outputs=[msg, chatbot, state])

return demo


# ──────────────────────────────────────────────
# 3. 启动 Gradio 应用
# ──────────────────────────────────────────────
print("\n🚀 启动 Gradio 应用...")
demo = create_chatbot()
demo.launch(server_name="0.0.0.0", server_port=7860, share=False, debug=True)

AutoDL 中运行 Gradio

如果在 AutoDL 等远程服务器上运行,需要映射端口后才能通过本地浏览器访问:

ssh -L 7860:127.0.0.1:7860 -p 25660 root@connect.westc.gpuhub.com

总结

LangChain 在 1.0 版本完成了一次真正意义上的"工程化重塑"。1.0 通过统一抽象、简化接口、强化生态与扩展性,使其正式进入 可用于企业生产级大模型应用开发 的阶段。

通过统一 Runnable 抽象、标准化模型接口、强化结构化输出能力、完善事件与回调体系,以及与 LangSmith/LangGraph 的深度融合,LangChain 已建立完整的 AI 应用全栈生态:

  • 模型调用:统一接口,跨厂商切换
  • 数据处理:Prompt 模板化、消息管理
  • RAG:文档加载、向量存储、检索
  • Agent:工具调用、多步推理
  • 工作流:LangGraph 图结构编排
  • 监控评估:LangSmith 可观测性

如果你需要构建高可靠、可观测、结构化输出、支持本地模型、可扩展的 AI 应用——LangChain 1.0 是当下最成熟、最工程化的选择之一。

参考资源