Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
natureLanguageQing opened this issue Aug 26, 2024 · 2 comments
Assignees

Comments

@natureLanguageQing
Copy link

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 的发展有所帮助。如果需要进一步讨论或协助,请随时联系我。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants
@natureLanguageQing @lugimzzz and others