用DeepSeek-R1构建GenAI应用
在这篇文章中,我们将使用DeepSeek开源模型构建一个生成式AI应用程序,该模型能够根据我们的需求生成代码和其他内容。


在这篇文章中,我们将使用DeepSeek开源模型构建一个生成式AI应用程序,该模型能够根据我们的需求生成代码和其他内容。在构建此应用程序时,我们将使用Langchain(AI工作流框架)、Ollama和DeepSeek-R1等开源工具。
为什么我们使用DeepSeek-R1、Langchain和Ollama?
- DeepSeek-R1: 一种高度强大的开源LLM,在推理、编码和创意任务方面表现出色。
- Langchain: 简化了将AI组件(模型、提示、数据库)组合成连贯的工作流程。
- Ollama: 它允许你在本地机器上运行DeepSeek-R1、Llama3.3和Phi-4等LLM,即使没有GPU。
0、环境搭建
首先从官方链接下载Ollama。
然后使用Ollama下载DeepSeek-R1模型
ollama run deepseek-r1:1.5b
接下来,安装以下库以运行模型
pip install streamlit
pip install langchain_core
pip install langchain_community
pip install langchain_ollama
现在让我们逐步编写代码。
1、LLM初始化
llm_engine = ChatOllama(
model=selected_model,
base_url="http://localhost:11434",
temperature=0.3,
streaming=True
)
- ChatOllama: 用于与托管在localhost:11434上的本地LLM交互的客户端。
- selected_model: 您选择的LLM(例如,DeepSeek)。
- temperature=0.3: 控制随机性(0 = 确定性,1 = 创造性)。
- streaming=True: 启用实时响应流。
2、系统提示配置
system_prompt = SystemMessagePromptTemplate.from_template(
"You are an expert AI coding assistant..."
)
- 定义AI的初始行为(简洁、正确且带有调试技巧)。
- 在对话开始之前为模型提供上下文。
3、会话状态管理
if "message_log" not in st.session_state:
st.session_state.message_log = [{"role": "ai", "content": "Hi! I'm DeepSeek..."}]
- st.session_state: 维护跨交互的聊天历史记录。
- 如果没有先前的聊天,则发送AI的问候消息。
4、显示聊天历史记录
def display_chat_history():
for message in st.session_state.message_log:
with st.chat_message(message["role"]):
st.markdown(message["content"])
- 迭代所有过去的聊天记录(用户和AI)。
- 使用st.chat_message()按适当的角色(用户或AI)显示它们。
5、构建提示链
def build_prompt_chain():
prompt_sequence = [system_prompt]
for msg in st.session_state.message_log:
if msg["role"] == "user":
prompt_sequence.append(HumanMessagePromptTemplate.from_template(msg["content"]))
elif msg["role"] == "ai":
prompt_sequence.append(AIMessagePromptTemplate.from_template(msg["content"]))
return ChatPromptTemplate.from_messages(prompt_sequence)
- 初始化: 函数首先添加系统_prompt到提示序列中以设置AI的行为。
- 会话历史处理: 它循环遍历st.session_state.message_log,添加用户消息使用HumanMessagePromptTemplate和AI响应使用AIMessagePromptTemplate。
- 提示链创建: 最后,它返回包含系统提示和完整对话历史的ChatPromptTemplate,以便上下文感知的AI响应。
6、使用流式传输生成AI响应
def generate_response():
prompt_chain = build_prompt_chain()
processing_pipeline = prompt_chain | llm_engine | StrOutputParser()
return processing_pipeline.stream({})
- 链接在一起: 提示、LLM和输出解析器。
- stream(): 分块流式传输响应,启用实时打字效果。
以下是结合后的代码。我添加了Streamlit和HTML&CSS代码,以便在UI上查看应用程序。
import streamlit as st
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import (
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
AIMessagePromptTemplate,
ChatPromptTemplate
)
import warnings
import sys
# 自定义应用程序的CSS样式
st.markdown("""
<style>
/* 现有样式 */
.main {
background-color: #1a1a1a;
color: #ffffff;
}
.sidebar .sidebar-content {
background-color: #2d2d2d;
}
.stTextInput textarea {
color: #ffffff !important;
}
/* 为下拉框添加这些新样式 */
.stSelectbox div[data-baseweb="select"] {
color: white !important;
background-color: #3d3d3d !important;
}
.stSelectbox svg {
fill: white !important;
}
.stSelectbox option {
background-color: #2d2d2d !important;
color: white !important;
}
/* 对于下拉菜单项 */
div[role="listbox"] div {
background-color: #2d2d2d !important;
color: white !important;
}
</style>
""", unsafe_allow_html=True)
st.title("🧠 DeepSeek代码伴侣由Lokendra构建")
st.caption("🚀 具有调试超能力的AI配对程序员")
# 侧边栏配置
with st.sidebar:
st.header("⚙️ 配置")
selected_model = st.selectbox(
"选择模型",
["deepseek-r1:1.5b", "deepseek-r1:3b", "deepseek-r1:7b", "deepseek-r1:8b"],
index=0
)
st.divider()
st.markdown("### 模型功能")
st.markdown("""
- 🐍 代码生成
- 🐞 调试助手
- 📝 文档
""")
st.divider()
st.markdown("### 🔗 资源")
st.markdown("""
- [Ollama文档](https://ollama.ai/)
- [LangChain指南](https://python.langchain.com/)
- [DeepSeek GitHub](https://github.com/deepseek-ai)
""")
# 主代码逻辑从这里开始
# 使用选定的模型(Deepseek)初始化聊天引擎
llm_engine = ChatOllama(
model=selected_model,
base_url="http://localhost:11434",
temperature=0.3,
streaming=True
)
system_prompt = SystemMessagePromptTemplate.from_template(
"You are an expert AI coding assistant. Provide concise, correct solutions "
"with strategic print statements for debugging. Always respond in English."
)
# 会话状态管理
if "message_log" not in st.session_state:
st.session_state.message_log = [{
"role": "ai",
"content": "Hi! I'm DeepSeek. How can I help you code today? 💻"
}]
# 显示聊天消息
def display_chat_history():
for message in st.session_state.message_log:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# 构建提示链
def build_prompt_chain():
prompt_sequence = [system_prompt]
for msg in st.session_state.message_log:
if msg["role"] == "user":
prompt_sequence.append(HumanMessagePromptTemplate.from_template(msg["content"]))
elif msg["role"] == "ai":
prompt_sequence.append(AIMessagePromptTemplate.from_template(msg["content"]))
return ChatPromptTemplate.from_messages(prompt_sequence)
def generate_response():
prompt_chain = build_prompt_chain()
processing_pipeline = prompt_chain | llm_engine | StrOutputParser()
return processing_pipeline.stream({})
display_chat_history()
user_query = st.chat_input("在此输入您的编程问题...")
if user_query:
st.session_state.message_log.append({"role": "user", "content": user_query})
with st.chat_message("user"):
st.markdown(user_query)
with st.chat_message("ai"):
response_placeholder = st.empty()
response_placeholder.markdown('<div class="typing-indicator">生成中<span class="dot"></span><span class="dot"></span><span class="dot"></span></div>', unsafe_allow_html=True)
full_response = ""
for chunk in generate_response():
full_response += chunk
response_placeholder.markdown(full_response + "▌")
# 更新最终响应
response_placeholder.markdown(full_response)
# 将助手响应添加到历史记录
st.session_state.message_log.append({"role": "ai", "content": full_response})
要运行上述代码,请使用以下命令:
streamlit run app.py

现在你可以准备在不使用互联网的情况下向您的生成式AI应用程序提出任何类型的问题。
7、结束语
通过使用DeepSeek-R1、Langchain和Ollama,我们构建了一个功能强大的生成式AI应用程序,能够生成智能响应。这种架构可以扩展以支持复杂的工作流程、实时数据处理和高级NLP任务。
对于本文的代码,你可以在我的GitHub上查看。
原文链接:Build a Gen AI App with the DeepSeek-R1 Model Using LangChain and Ollama
汇智网翻译整理,转载请标明出处