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

DeepSeek+dify知识库,查询数据库api 方式

文章目录

  • DeepSeek+dify知识库,查询数据库api 方式
    • 本地准备
    • 接口开发
    • 配置工作流
    • 解决deepseek返回think标签处理

DeepSeek+dify知识库,查询数据库api 方式

想干这事之前先梳理下流程
请添加图片描述

  1. 用户输入问题,根据用户的问题提出关键词
  2. 通过http调用外部服务接口,根据关键词查询数据库
  3. 返回200,调用大模型,将用户问题和知识进行梳理
  4. 返回其他,直接输出

本地准备

要求:

  • 有一个python环境
  • 安装pymysq和flask 组件python -m pip install pymysql flask
  • 有一个mysql,或其他的数据库,我有mysql直接用了

接口开发

让kimi给我生成一个文章表,并且插入10条数据,我们可以告诉kimi,文章长度多大,这样内容可以丰富些。
请添加图片描述

请添加图片描述

请添加图片描述

直接让kimi生成一个暴露接口查数据库的服务,有简单的优化了下,将下面的内容放入到server.py文件中


from flask import Flask, request, jsonify
import pymysql
app = Flask(__name__)
# 数据库配置
DATABASE_CONFIG = {
    'host': '', # 自己的数据库地址
    'user': '', # 自己数据库的账户
    'password': '', #自己数据库的密码
    'db': 'demo', # 自己数据库的库名
    'charset': 'utf8mb4',
    'cursorclass': pymysql.cursors.DictCursor
}
@app.route('/query', methods=['POST'])
def query_database():
    print("接收到请求")
    # 获取关键字
    keyword = request.json.get('keyword')
    print("keyword为:"+keyword)
    ifnot keyword:
        return jsonify({"error": "Keyword is required"}), 400
   
    # 参数化查询,避免 SQL 注入,修改成自己的库
    query = "SELECT * FROM articles WHERE content LIKE %s"
    params = ('%' + keyword + '%',)
   
    try:
        # 建立数据库连接
        connection = pymysql.connect(**DATABASE_CONFIG)
        with connection.cursor() as cursor:
            # 执行查询
            cursor.execute(query, params)
            result = cursor.fetchall()
       
        connection.commit()
        connection.close()
        ifnot result:
            return"未查询到有效数据", 400
       
        # 生成 Markdown 表格
        markdown_table = generate_markdown_table(result)
       
        return markdown_table, 200
   
    except Exception as e:
        return str(e), 500
def generate_markdown_table(results):
    """ 生成 Markdown 表格 """
    ifnot results:
        return""
    # 获取列名
    columns = results[0].keys()
   
    # 表头
    table_md = "| " + " | ".join([col for col in columns]) + " |\n"
    # 分隔线
    table_md += "| " + " --- |" * len(columns) + "\n"
   
    # 表格内容
    for row in results:
        table_md += "| " + " | ".join([str(cell) for cell in row.values()]) + " |\n"
   
    return table_md
if __name__ == '__main__':
    # 注意这里绑定本机的内容ip,省事点,就0.0.0.0即可。不要绑定127.0.0.1,docke内访问不到
    app.run(host='10.1.0.65', port=8000)


启动服务


python .\server.py

配置工作流

请添加图片描述

创建一个空白应用。

请添加图片描述

在开始节点添加一个输入字段context

请添加图片描述

添加一个LLM,把开始节点设置的context字段作为上下文传入,并设置提示词提取关键词。

请添加图片描述

添加一个http请求节点,把我们在接口开发里的地址和接口名填写进去2,然后把大模型的输出作为关键词填写到请求body里3,我们关闭重试机制4。

这里要注意下:json的引号是中文的,最好在外面写好校验过了再放进去。
请添加图片描述

在HTTP请求的输出变量里,我们只关注status_code 响应状态码和响应内容即可。
请添加图片描述

添加一个条件分支1,然后设置HTTP响应码为200的时候,连接到大模型。其他直接结束。

添加大模型,将HTTP请求的响应体作为上下文给大模型,输入提示词,让大模型根据知识,验证,并进行合理性的验证,最后结构化返回。
请添加图片描述
请添加图片描述

在结束节点中,我们把大模型整理的内容输出。

请添加图片描述

试运行效果。

解决deepseek返回think标签处理

在这里插入图片描述

相关文章:

  • C++蓝桥杯实训篇(三)
  • with_listeners 运行流程与解析
  • Flask(九)邮件发送与通知系统
  • 分布式架构:Dubbo 协议如何做接口测试
  • 从振动谐波看电机寿命:PdM策略下的成本控制奇迹
  • Json快速入门
  • C++中的move操作
  • python 判断字符串是否包含关键字
  • 7.2 重复推送(每日、每周等)
  • springboot集成kafka,后续需要通过flask封装restful接口
  • 基于 Node.js 和 Spring Boot 的 RSA 加密登录实践
  • 程序化广告行业(70/89):ABTester系统助力落地页优化实践
  • 【C++篇】深入解析C/C++内存管理:从原理到实践
  • c语言 文件操作
  • MTO和MTS不同模式制造业数字化转型的“三座大山“:MES/ERP/PLM系统集成技术全解析
  • Buffer Pool 的核心作用与工作机制
  • uni-app使用web-view传参的坑
  • HOW - React Error Catch 机制
  • Three.js 系列专题 7:性能优化与最佳实践
  • TVBOX最新配置接口\直播源接口 收集整理【 2025.4】
  • 汕头违建豪宅“英之园”将强拆,当地:将根据公告期内具体情况采取下一步措施
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选
  • 外交部亚洲司司长刘劲松会见印度驻华大使罗国栋
  • 工人日报评规范隐藏式车门把手:科技美学须将安全置顶
  • 人民网评:守护健康证的“健康”,才有舌尖上的安全
  • 巴基斯坦全国航班仍持续延误或取消