后端实现(三):接口实现-对接具体数据库操作

基于RAG技术的模型检索增强及回复

基于Neo4j图数据库的知识图谱动态查询及相应

基于FLASK的模型后端设计

在8080接口抛出FLASK后端

使用图数据库检索到的Document对模型回复进行增强

提供系统级别Prompt
        self.dialog = [{'role': 'system', 'content': '你是山东大学VCRS(可视化课程知识问答系统)的AI助手,对于用户给出的问题,系统会给出参考资料.根据参考资料进行回答.'
                                                     '系统给出的知识含有问题中所含实体对应的解释$description及对应页码$page_num,你应该以如下方式回答:'
                                                     '[知识问答]\n[参考资料]\n,其中[知识问答]是你给出的回复'
                                                     '[参考资料]的格式应该像这样:1.$description\t[资料页码:$page_num] .[参考资料]由你结合自己的理解**筛选**系统给出的知识最多三条,不可以瞎编.'
                                                     '你的回答应该条理清晰且富有启发性'}]

每次调用模型后在user_query后主动增强一条system的输入,含有系统检索到的相关实体知识

举例:

user_query:

    def dialog_update(self, message, role='user'):
        # message should be formatted like this:
        # {'role': 'user', 'content': 'You are a helpful assistant.'}
        # role:'user','system','assistant'
        self.dialog.append({'role': role, 'content': message})

    def call(self):
        response = dashscope.Generation.call(
            model='qwen-max-0403',
            messages=self.dialog,
            result_format='message', )

        if response.status_code == HTTPStatus.OK:
            print(response)
            return response.output.choices[0]["message"]

        else:
            print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
                response.request_id, response.status_code,
                response.code, response.message
            ))

    def step(self, user_query, system_prompt=''):
        self.dialog_update(user_query, role='user')
        print("system prompt is:", system_prompt)
        self.dialog_update(system_prompt, role='system')
        model_response = self.call()
        self.dialog_update(model_response, role='assistant')
        return model_response["content"]
每次对话后都进行实体识别和基于知识图谱的知识检索
    def step(self, user_query, system_prompt=''):
        self.dialog_update(user_query, role='user')
        print("system prompt is:", system_prompt)
        self.dialog_update(system_prompt, role='system')
        model_response = self.call()
        self.dialog_update(model_response, role='assistant')
        return model_response["content"]

实现基于Flask的后端接口供前端请求

使用POST接口方式在本地指定url下抛出响应方法
@app.route('/show', methods=['POST'])
def query_to_node():
    user_input = request.json
    entity = user_input.get('query')
    server = MyServer()
    graphData, description, questions, expands, memos = server.execute_graph(entity)
    response = {
        'computerNetworkInfo': description,
        'expands': expands,
        'graphData': graphData,
        'questions': questions,
        'memos': memos
    }
    return response

前端只需要使用request库请求即可得到响应结果

import requests

url1 = 'http://127.0.0.1:8080/query'
data = {'query':"计算机网络的定义是什么"}
response1 = requests.post(url1, json=data)
# 打印服务器返回的响应
print(response1.text)

实现了所有后端接口,以抛出指定url下post方法的形式与Vue前端相连接,前端只需要带参(如用户此次query内容)使用requests库请求指定url即可得到后端回复。

分别实现了根据用户query使用自己设计的滑动窗口方法切分并在知识图谱中匹配实体。返回关键实体列表,可以使用实体查询知识图谱并返回关键子图,返回formatted过后的模型回复等一系列用到的所有后端接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值