为答疑机器人扩展问题分类与路由功能

1.意图识别

在这里插入图片描述

2. 构建路由模块

简单的意图识别

from chatbot import llm

from config.load_key import load_key
load_key()

prompt = '''
【角色背景】
你是一个问题分类路由器,需要识别问题的类型。
---
【任务要求】
问题的类型目前有:公司内部文档查询、内容翻译、文档审查
你只能选择一类意图作为你的判断,并不要说任何无关内容。
---
【用户输入】
以下是用户输入,请判断:
'''
def get_question_type(question):
    """
    获取问题的类型

    参数:
    - question (str): 需要判断的问题文本

    返回值:
    - str: 问题类型,可能是 "文档审查" 、 "内容翻译"或“公司内部文档查询”
    """
    return llm.invoke(prompt + question)

print(get_question_type('https://www.promptingguide.ai/zh/techniques/fewshot'))
print('\n')
print(get_question_type('That is a big one I dont know why'))
print('\n')
print(get_question_type('作为技术内容工程师有什么需要注意的吗?'))

在这里插入图片描述
运行后发现,其实第一个问题是想问“文档审查”,但结果却是“内容翻译”。

2.1 优化策略:

我们可以利用提示词工程优化意图识别效果

路径:应用组件 - Prompt 工程
提示词自动优化工具

通用技巧: 提示词工程指南
少量样本提示((Few-Shot Prompting)
链式思考(Chain-of-Thought Prompting)
ReACT框架(Reason-Act)

明确输出格式:指定输出格式,使分类结果规范且易于解析。
Few-shot 示例:提供示例,帮助大模型理解每个类别的特征和分类规则。

from chatbot import llm
from config.load_key import load_key
load_key()

prompt = '''
【角色背景】
你是一个问题分类路由器,负责判断用户问题的类型,并将其归入下列三类之一:
1. 公司内部文档查询
2. 内容翻译
3. 文档审查

【任务要求】
你的任务是根据用户的输入内容,判断其意图并仅选择一个最贴切的分类。请仅输出分类名称,不需要多余的解释。判断依据如下:

- 如果问题涉及公司政策、流程、内部工具或职位描述与职责等内容,选择“公司内部文档查询”。
- 如果问题涉及任意一门非中文的语言,且输入中没有任何出现任何外语或出现“翻译”等字眼,选择“内容翻译”。
- 如果问题涉及检查或总结外部文档或链接内容,选择“文档审查”。
- 用户的前后输入与问题分类并没有任何关系,请单独为每次对话考虑分类类别。

【Few-shot 示例】
示例1:用户输入:“公司内部有哪些常用的项目管理工具?”
分类:公司内部文档查询

示例2:用户输入:“How can we finish the assignment on time?”
分类:内容翻译

示例3:用户输入:“https://help.aliyun.com/zh/model-studio/user-guide/long-context-qwen-long”
分类:文档审查

示例4:用户输入:“技术内容工程师需要设计和开发⾼质量的教育教材和课程吗?”
分类:文档审查

示例5:用户输入:“技术内容工程师核心职责是什么?”
分类:公司内部文档查询

【用户输入】
以下是用户的输入,请判断分类:

'''

def get_question_type(question):
    """
    获取问题的类型

    参数:
    - question (str): 需要判断的问题文本

    返回值:
    - str: 问题类型,可能是 "文档审查" 、 "内容翻译"或“公司内部文档查询”
    """
    return llm.invoke(prompt + question)

print(get_question_type('https://www.promptingguide.ai/zh/techniques/fewshot'))
print('\n')
print(get_question_type('That is a big one I dont know why'))
print('\n')
print(get_question_type('作为技术内容工程师有什么需要注意的吗?'))

在这里插入图片描述
优化后可以看出第一个问题的意图识别出来,是“文档审查”。

3. 文档自动审阅和修改

结合上面的意图识别,我们可以扩展对应的功能。

1.对内容进行文档审查。利用大语言模型可以进行网页审查。
2.利用RAG,查询企业内部信息。
3.翻译,大语言模型自带翻译功能。

from chatbot import rag
from chatbot import llm
from config.load_key import load_key
load_key()

# 加载索引并设置query engine
query_engine = rag.create_query_engine(index=rag.load_index())


prompt = '''
【角色背景】
你是一个问题分类路由器,负责判断用户问题的类型,并将其归入下列三类之一:
1. 公司内部文档查询
2. 内容翻译
3. 文档审查

【任务要求】
你的任务是根据用户的输入内容,判断其意图并仅选择一个最贴切的分类。请仅输出分类名称,不需要多余的解释。判断依据如下:

- 如果问题涉及公司政策、流程、内部工具或职位描述与职责等内容,选择“公司内部文档查询”。
- 如果问题涉及任意一门非中文的语言,且输入中没有任何出现任何外语或出现“翻译”等字眼,选择“内容翻译”。
- 如果问题涉及检查或总结外部文档或链接内容,选择“文档审查”。
- 用户的前后输入与问题分类并没有任何关系,请单独为每次对话考虑分类类别。

【Few-shot 示例】
示例1:用户输入:“公司内部有哪些常用的项目管理工具?”
分类:公司内部文档查询

示例2:用户输入:“How can we finish the assignment on time?”
分类:内容翻译

示例3:用户输入:“https://help.aliyun.com/zh/model-studio/user-guide/long-context-qwen-long”
分类:文档审查

示例4:用户输入:“技术内容工程师需要设计和开发⾼质量的教育教材和课程吗?”
分类:文档审查

示例5:用户输入:“技术内容工程师核心职责是什么?”
分类:公司内部文档查询

【用户输入】
以下是用户的输入,请判断分类:

'''

def get_question_type(question):
    """
    获取问题的类型

    参数:
    - question (str): 需要判断的问题文本

    返回值:
    - str: 问题类型,可能是 "文档审查" 、 "内容翻译"或“公司内部文档查询”
    """
    return llm.invoke(prompt + question)

def ask_v4(question):
    question_type = get_question_type(question)
    print(f'问题:{question}\n类型:{question_type}')
    if question_type == '文档审查':
        return llm.invoke('你是文档纠错专家,负责找出文档中或网页内容的明显错误,并且言简意赅的回复。如果没有明显问题,请直接回复没有问题\n' + question)
    elif question_type == '公司内部文档查询':
        return rag.ask(question, query_engine=query_engine)
    elif question_type == '内容翻译':
        return llm.invoke(f'你是一名翻译专家,你要识别不同语言的文本,并翻译为中文。\n{question}')
    else:
        return "未能识别问题类型,请重新输入。"

if __name__ == "__main__":
    print(ask_v4('https://www.promptingguide.ai/zh/techniques/fewshot'))
    print('')
    print(ask_v4('请帮我检查下这段文档:技术内容工程师有需要进行内容优化与更新与跨部门合作吗?'))
    print('')
    print(ask_v4('技术内容工程师有需要进行内容优化与更新与跨部门合作吗?'))
    print('')
    print(ask_v4('A true master always carries the heart of a student.'))

在这里插入图片描述
上面代码已经完成了大部分工作,但第一个问题识别成“文档审查”,如何优化,其实也是老套路。
在提示词多加一个实例

示例6:用户输入:“请帮我检查下这段文档:技术内容工程师核心职责是什么?”
分类:公司内部文档查询

再运行一下代码
在这里插入图片描述
发现这次结果就正确了。

总结

在这文章了,我们实现了一个小小的大语言agent功能,相对于Assistants一些工具类,我更喜欢重新用大语言去进行意图识别,因为还能进行多意图识别,并按顺序返回并按顺序执行任务。 当然,也可以借助类似Dify这些智能体流程编排。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值