当前位置: 首页 > 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/

http://www.dtcms.com/a/17765.html

相关文章:

  • 二级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模型属性详解
  • 探索边缘计算网关在优化交通信号控制中的关键角色
  • 行业视野 | 数字化赋能:作战体系仿真推演可视化与效能评估
  • [LeetCode] 二叉树 III — 110#平衡二叉树 | 257#二叉树的所有路径 | 404#左叶子之和 | 222#完全二叉树的节点个数
  • 【LeetCode Hot100 子串】和为 k 的子数组、滑动窗口最大值、最小覆盖子串
  • 5、《Spring Boot自动配置黑魔法:原理深度剖析》
  • 力反馈设备在工厂生产中遥操作机器人的应用优势
  • Filter过滤器
  • HashMap安全性
  • 利用ffplay播放udp组播视频流
  • 杜绝遛狗不牵绳,AI技术助力智慧城市宠物管理