当前位置: 首页 > news >正文

搭建本地模型,实现聊天机器人

1、使用Ollama安装启动deepseek-r1:7b模型

2、Ollama启动访问地址:http://localhost:11434

3、python程序调用本地模型,实现简单的聊天机器人

实现代码如下app.py:

import chainlit as cl
import requests
from abc import ABC, abstractmethod
from typing import Any, Sequence

# 假设以下类型已经从 llama_index.core.base.llms.types 导入
ChatMessage = dict
ChatResponse = str
CompletionResponse = str

class BaseLLM(ABC):
    @abstractmethod
    def chat(self, messages: Sequence[ChatMessage], **kwargs: Any) -> ChatResponse:
        pass

    @abstractmethod
    def complete(self, prompt: str, **kwargs: Any) -> CompletionResponse:
        pass

class DeepSeekLLM(BaseLLM):
    def __init__(self, model="deepseek-r1:7b", api_base="http://localhost:11434/v1", temperature=0.7):
        self.model = model
        self.api_base = api_base
        self.temperature = temperature

    def chat(self, messages: Sequence[ChatMessage], **kwargs: Any) -> ChatResponse:
        url = f"{self.api_base}/v1/chat/completions"
        data = {
            "model": self.model,
            "messages": messages,
            "temperature": self.temperature,
            "stream": False
        }
        response = requests.post(url, json=data)
        response.raise_for_status()
        response_data = response.json()
        return response_data["choices"][0]["message"]["content"]

    def complete(self, prompt: str, **kwargs: Any) -> CompletionResponse:
        url = f"{self.api_base}/chat/completions"
        data = {
            "model": self.model,
            "messages": [{"role": "user", "content": prompt}],
            "temperature": self.temperature,
            "stream": False
        }
        response = requests.post(url, json=data)
        response.raise_for_status()
        response_data = response.json()
        return response_data["choices"][0]["message"]["content"]

@cl.on_chat_start
async def start():
    await cl.Message(author="Assistant", content="你好!我是你的聊天助手。").send()

@cl.on_message
async def handle_message(message: cl.Message):
    llm = DeepSeekLLM()
    response = llm.complete(message.content)
    await cl.Message(author="Assistant", content=response).send()

if __name__ == "__main__":
    cl.run()

注意:①安装chainlit前端框架插件:pip install chainlit

           ②页面启动命令:chainlit run app.py -w

           ③访问页面:http://localhost:8000/

相关文章:

  • 二级C语言题解:函数指针的操作、单链表偶数结点值累加、判断回文
  • 2025年——【寒假】自学黑客计划(网络安全)
  • 达梦:TPCC 压测
  • 解决Did not find dashscope_api_key问题——jupyter设置环境变量
  • 初学总结SpringBoot项目在mac上环境搭建和运行
  • 教育小程序+AI出题:如何通过自然语言处理技术提升题目质量
  • [npm install 报错] Verion 9 of Highlight.js has reached EOL
  • ESP32 WIFI
  • 封装一个sqlite3动态库
  • C#两个集合多属性组合关联得到新的组合
  • 机器学习算法 - 随机森林之决策树初探(1)
  • 哪些专业跟FPGA有关?
  • 计算机等级考试——计算机三级——网络技术部分
  • 多态、虚函数、动态绑定、虚指针加虚表是同一件事情。
  • 【Oracle】层次查询步骤,理解 where 条件执行顺序
  • DeepSeek帮助解决Oracle死锁问题
  • LeetCode刷题---字符串---859
  • 2768. 黑格子的数目|2175
  • AI时代前端开发:创造力的新引擎?
  • SQLMesh系列教程-3:SQLMesh模型属性详解
  • 巴基斯坦称对印度发起军事行动
  • 优秀“博主”在上海杨浦购房最高补贴200万元,有何条件?
  • 雇来的“妈妈”:为入狱雇主无偿带娃4年,没做好准备说再见
  • 牛市早报|国家发改委:今年将推出约3万亿元优质项目,支持民营企业参与
  • 妻子藏匿一岁幼儿一年多不让丈夫见,法院发出人格权侵害禁令
  • 少年中国之少年的形塑