大模型应用开发二:添加历史消息,实现多轮对话机器人

添加历史消息

在应用开发一中我们已经成功调用了deepseek的api,但是我们发现我的AI助手仅仅只能回答一次问题,对以前讨论的问题并不知道。

原因是因为AI模型的上下文是以列表[]储存的,每一条消息是一个集合{},每个集合有两个字典元素,也就是两个键值对,类似于:

all_prompt = [

    {"role":"user","content":"你好"}#用户问题

    {"role":"assitant","content":"你好!请问有什么可以帮助的吗?"}#模型回复

]

而我们在循环中每一次调用chat_with_llm函数就相当于重新清空了上下文,所以AI模型不知道我们以前的对话内容。

所以,我们只需要在函数中加入用户的问题和模型的回复作为上下文即可,可以对列表使用append方法,将用户之前的用户问题和模型回复作为上下文传递给模型,完整代码如下:

import openai


openai.api_key = "sk-2c***477"
openai.api_base= "https://api.deepseek.com"


prompt = []

def chat_with_llm(user_input):

    #加入用户的问题
    prompt.append({"role":"user","content":user_input})
    try:
        response = openai.ChatCompletion.create(
            model = "deepseek-chat",
            messages = prompt,
            temperature=0.7
        )
        assistant_response = response.choices[0].message.content

        #加入模型的回复
        prompt.append({"role":"assistant","content":assistant_response})

        return assistant_response
    except Exception as e:
        return f"发生错误: {str(e)}"


while True:
    print("小崔:",end="")
    user_input = input()
    
    response = chat_with_llm(user_input)
    print("AI助手:"+response)
    

运行以上代码,我们就可以发现模型已经知道了历史消息。

模型容纳上下文长度有限度,我们常看到的“最大上下文16k”,就是代表模型的历史消息不能超过模型的最大上下文窗口大小约为 16,000 个 token(16k),(可以将一个token理解为一个文字,具体解释可以询问AI),这意味着模型在处理对话时,最多只能记住 最近 16k token 以内的内容(包括用户输入和模型回复)。超出这个范围的旧消息会被丢弃或截断,无法再影响模型的理解和回复。所以我们在和AI对话时,尽量言简意赅,简洁表达问题,分批次交互,而不是所有问题占用一个对话窗口。

### 将本地部署的大模型集成到飞书机器人的方法 要实现将本地部署的大模型应用集成到飞书机器人中,可以按照以下方式完成: #### 1. **环境准备** 为了使本地部署的大模型能够被飞书机器人调用,需先确保大模型已成功运行于服务器上并提供可访问的接口服务。如果采用的是 LangChain 或其他框架,则可以通过 RESTful API 的形式暴露模型的服务端口[^1]。 对于嵌入式向量数据库的需求,推荐使用 `nomic-embed-text` 这类轻量化工具来处理文本数据,并通过 Ollama 安装至本地环境中执行命令 `$ ollama pull nomic-embed-text:latest` 来下载所需模型文件[^3]。 #### 2. **构建后端服务** 创建一个基于 Python Flask/Django 或 FastAPI 的 Web 应用来封装上述提到的大规模预训练语言模型功能。此部分主要负责接收来自前端(即飞书侧)传递过来的消息请求参数解析以及返回计算后的响应结果给客户端展示出来。 以下是利用 FastAPI 实现的一个简单示例代码片段: ```python from fastapi import FastAPI, Request import uvicorn app = FastAPI() @app.post("/predict/") async def predict(request: Request): data = await request.json() user_message = data.get('message', '') # 调用本地部署好的大模型进行推理预测逻辑省略... response_text = f"Received your message: {user_message}" return {"response": response_text} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) ``` 在此基础上还可以加入更多高级特性如对话历史记录管理等功能模块进一步提升用户体验效果[^2]。 #### 3. **配置飞书开发者平台** 登录 [飞书开放平台](https://open.feishu.cn/) 创建一个新的自定义机器人实例,在设置页面填写好名称图标等相关信息之后记得开启消息卡片通知权限以便后续能顺利接收到用户发送来的指令触发事件推送机制工作流程如下图所示: ![image.png](attachment:image.png) 接着获取当前项目唯一标识 ID (AppID & AppSecret),用于签名验证身份合法性校验过程防止恶意第三方伪造虚假流量攻击系统安全防护措施至关重要不可忽视任何细节环节务必谨慎操作以免造成不必要的损失风险隐患等问题发生影响业务正常运转效率降低客户满意度下降等情况出现。 最后一步就是编写具体的回调 URL 地址指向刚才我们开发出来的那个后端 api 接口地址即可完成整个闭环链条搭建完毕等待测试上线正式投入使用阶段到来吧! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值