> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 用DeepSeek-R1构建GenAI应用
- URL: https://www.hubwiz.com/blog/build-genai-apps-with-deepseek-r1/
- Published: 2025-02-17T03:42:32.000Z
- Updated: 2025-02-27T10:37:12.000Z
- Description: 在这篇文章中，我们将使用DeepSeek开源模型构建一个生成式AI应用程序，该模型能够根据我们的需求生成代码和其他内容。
- Author: admin
- Tags: APPLICATION, DEEPSEEKR1, LANGCHAIN, OLLAMA, #Import 2026-10-14 14:41

![](http://127.0.0.1:8000/images/14EYGhD_2u3YHI7jTdc1gcQ.jpeg)

在这篇文章中，我们将使用DeepSeek开源模型构建一个生成式AI应用程序，该模型能够根据我们的需求生成代码和其他内容。在构建此应用程序时，我们将使用Langchain（AI工作流框架）、Ollama和DeepSeek-R1等开源工具。

> 为什么我们使用DeepSeek-R1、Langchain和Ollama？

1. **DeepSeek-R1:** 一种高度强大的开源LLM，在推理、编码和创意任务方面表现出色。
2. **Langchain:** 简化了将AI组件（模型、提示、数据库）组合成连贯的工作流程。
3. **Ollama:** 它允许你在本地机器上运行DeepSeek-R1、Llama3.3和Phi-4等LLM，即使没有GPU。

## 0、环境搭建

首先从[官方链接](https://ollama.com/download?ref=hubwiz.com)下载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上查看应用程序。

```python
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

```

![](https://www.hubwiz.com/blog/content/images/2025/02/image-633.png)

现在你可以准备在不使用互联网的情况下向您的生成式AI应用程序提出任何类型的问题。

## 7、结束语

通过使用DeepSeek-R1、Langchain和Ollama，我们构建了一个功能强大的生成式AI应用程序，能够生成智能响应。这种架构可以扩展以支持复杂的工作流程、实时数据处理和高级NLP任务。

对于本文的代码，你可以在我的[GitHub](https://github.com/lokendrasolanki/GenAi-with-Deepseek-r1?ref=hubwiz.com)上查看。

---

原文链接：[Build a Gen AI App with the DeepSeek-R1 Model Using LangChain and Ollama](https://medium.com/@lokendrasolanki60/build-a-gen-ai-app-with-the-deepseek-r1-model-using-langchain-and-ollama-6875b0321bd5?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处