PaddlePaddle / PaddleNLP

👑 Easy-to-use and powerful NLP and LLM library with 🤗 Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications, including 🗂Text Classification, 🔍 Neural Search, ❓ Question Answering, ℹ️ Information Extraction, 📄 Document Intelligence, 💌 Sentiment Analysis etc.
https://paddlenlp.readthedocs.io
Apache License 2.0
12.11k stars 2.94k forks source link

增强 paddlenlp 以支持多轮对话、agent对话和工具对话 #9006

Closed natureLanguageQing closed 3 days ago

natureLanguageQing commented 2 months ago

Feature request

目前,paddlenlp 的大模型问答功能仅支持单轮问答。为了充分发挥大型语言模型的潜力,建议增强其对话功能,支持多轮对话、agent对话和工具对话。同时,当前的设计将命令行和业务组件混合在一起,建议明确命令行负责启动接口,代码负责实现业务组件,以提升代码的可维护性和扩展性。

当前实现:

python 复制代码 from paddlenlp.transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B") model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B", dtype="float16") input_features = tokenizer("你好!请自我介绍一下。", return_tensors="pd") outputs = model.generate(**input_features, max_length=128) print(tokenizer.batch_decode(outputs[0])) 输出:

css 复制代码 ['我是一个AI语言模型,我可以回答各种问题,包括但不限于:天气、新闻、历史、文化、科学、教育、娱乐等。请问您有什么需要了解的吗?'] 问题:

单轮对话的局限性: 当前实现仅支持单轮问答,无法处理更复杂的对话交互。 对话类型的缺乏: 现有实现未涵盖多轮对话、agent对话和工具对话等重要对话类型。 命令行与业务组件混合: 目前的设计将命令行启动与业务组件实现混合,可能影响代码的可维护性和扩展性。

Motivation

建议的改进:

多轮对话支持:

目标: 提升模型对话能力,支持多轮对话,能够记住上下文并维持对话状态。 实现建议: 引入对话上下文管理功能,将用户的对话历史纳入模型输入。 示例代码: python 复制代码 conversation_history = ["你好!请自我介绍一下。"] input_features = tokenizer(conversation_history[-1], return_tensors="pd") outputs = model.generate(**input_features, max_length=128) response = tokenizer.batch_decode(outputs[0]) conversation_history.append(response[0]) agent对话功能:

目标: 实现更复杂的对话代理(agent),处理特定任务或回应特定的用户请求。 实现建议: 开发模块支持对话代理功能,如任务执行和指令处理。 示例代码: 在对话中插入 agent 的功能调用,例如检索信息、执行操作等。 工具对话功能:

目标: 支持模型与外部工具的集成,通过对话自动调用工具或服务。 实现建议: 设计 API 接口与外部工具集成,如天气查询、翻译等。 示例代码: 用户询问天气时,模型调用天气 API 并返回结果。 明确命令行与业务组件职责:

目标: 将命令行启动与业务逻辑实现分开,提升代码的可维护性。 实现建议: 命令行接口: 负责启动程序和处理用户输入。 业务组件: 负责实际的业务逻辑和模型交互。 示例代码结构: bash 复制代码

命令行启动脚本

python run_model.py --config config.json python 复制代码

run_model.py

from my_model_module import run if name == "main": run() python 复制代码

my_model_module.py

def run():

业务逻辑实现

pass

Your contribution

多轮对话: 增强模型支持多轮对话,改进对话管理和上下文维持能力。 agent对话: 实现对话代理功能,支持复杂的任务和指令处理。 工具对话: 集成外部工具,扩展模型的功能。 代码结构优化: 明确命令行与业务组件的职责,提升代码的可维护性和扩展性。 感谢团队的持续投入和贡献,希望这些建议能对 paddlenlp 的发展有所帮助。如果需要进一步讨论或协助,请随时联系我。

github-actions[bot] commented 2 weeks ago

This issue is stale because it has been open for 60 days with no activity. 当前issue 60天内无活动,被标记为stale。

github-actions[bot] commented 3 days ago

This issue was closed because it has been inactive for 14 days since being marked as stale. 当前issue 被标记为stale已有14天,即将关闭。