ant-design / pro-chat

🤖 Components Library for Quickly Building LLM Chat Interfaces.
https://pro-chat.antdigital.dev
MIT License
736 stars 95 forks source link

👑 [需求] 添加ChatGPT主动发消息的功能 #43

Open xiaoqiang1999 opened 10 months ago

xiaoqiang1999 commented 10 months ago

🥰 需求描述

遇到一个需求:用户不主动对ChatGPT发送消息,需要程序去请求ChatGPT,然后将返回的消息显示到消息列表中; 也就是说,需要ChatGPT主动发送消息给用户,而不是用户发送消息给ChatGPT后ChatGPT再回复。

🧐 解决方案

所以我去翻了文档,没有找到添加ChatGPT的消息到消息列表的方法,只找到了用来给ChatGPT发送消息的Ref实例上的sendMessage方法。 或许可以添加一个与sendMessage类似的方法“GPTSendMessage”

参数可以和组件Props上的request一致,是一个async函数,内部拿到这个函数就可以像调用request函数的方法一样进行调用,最终渲染一条ChatGPT的消息,比如:

chatRef.current.GPTSendMessage(async () => {
  // 在这里发起请求 获取到ChatGPT的响应
  // 然后把响应数据返回
  const mockedData: string = `这是一段模拟的流式字符串数据。`;
  const mockResponse = new MockResponse(mockedData, 50);
  return mockResponse.getResponse();
});

调用后的效果图: image

或者大家有什么更好的方法来解决这个问题? 抛砖引玉,感谢大佬们的开源!

🚑 其他信息

ONLY-yours commented 10 months ago

目前所有的 GPT 返回都是在 request 里面处理的

可以在 request 里面去吃掉这串逻辑?

感觉需要添加一个自定义的方法,让程序可以随时 push 一条数据进去,但是这个不应该触发请求。(不论是 用户还是 gpt 消息都可以随时push进去)

@arvinxx @chenshuai2144

arvinxx commented 10 months ago

现在有 dispatchMessage 的方法,可以自行创建一条新消息。我建议是可以加个 createMessage 方法,然后在 instance 层面透出来

xiaoqiang1999 commented 10 months ago

目前所有的 GPT 返回都是在 request 里面处理的

可以在 request 里面去吃掉这串逻辑?

感觉需要添加一个自定义的方法,让程序可以随时 push 一条数据进去,但是这个不应该触发请求。(不论是 用户还是 gpt 消息都可以随时push进去)

@arvinxx @chenshuai2144

感觉这个”push一条数据进去但不触发请求“的方法不错,但是也得处理好Response Stream,还有这条Message的loading效果

lkzwc commented 10 months ago

🥰 需求描述

遇到一个需求:用户不主动对ChatGPT发送消息,需要程序去请求ChatGPT,然后将返回的消息显示到消息列表中; 也就是说,需要ChatGPT主动发送消息给用户,而不是用户发送消息给ChatGPT后ChatGPT再回复。

🧐 解决方案

所以我去翻了文档,没有找到添加ChatGPT的消息到消息列表的方法,只找到了用来给ChatGPT发送消息的Ref实例上的sendMessage方法。 或许可以添加一个与sendMessage类似的方法“GPTSendMessage”

参数可以和组件Props上的request一致,是一个async函数,内部拿到这个函数就可以像调用request函数的方法一样进行调用,最终渲染一条ChatGPT的消息,比如:

chatRef.current.GPTSendMessage(async () => {
  // 在这里发起请求 获取到ChatGPT的响应
  // 然后把响应数据返回
  const mockedData: string = `这是一段模拟的流式字符串数据。`;
  const mockResponse = new MockResponse(mockedData, 50);
  return mockResponse.getResponse();
});

调用后的效果图: image

或者大家有什么更好的方法来解决这个问题? 抛砖引玉,感谢大佬们的开源!

🚑 其他信息

这个有场景吗 就第一次gpt主动发送?

xiaoqiang1999 commented 10 months ago

🥰 需求描述

遇到一个需求:用户不主动对ChatGPT发送消息,需要程序去请求ChatGPT,然后将返回的消息显示到消息列表中; 也就是说,需要ChatGPT主动发送消息给用户,而不是用户发送消息给ChatGPT后ChatGPT再回复。

🧐 解决方案

所以我去翻了文档,没有找到添加ChatGPT的消息到消息列表的方法,只找到了用来给ChatGPT发送消息的Ref实例上的sendMessage方法。 或许可以添加一个与sendMessage类似的方法“GPTSendMessage” 参数可以和组件Props上的request一致,是一个async函数,内部拿到这个函数就可以像调用request函数的方法一样进行调用,最终渲染一条ChatGPT的消息,比如:

chatRef.current.GPTSendMessage(async () => {
  // 在这里发起请求 获取到ChatGPT的响应
  // 然后把响应数据返回
  const mockedData: string = `这是一段模拟的流式字符串数据。`;
  const mockResponse = new MockResponse(mockedData, 50);
  return mockResponse.getResponse();
});

调用后的效果图: image 或者大家有什么更好的方法来解决这个问题? 抛砖引玉,感谢大佬们的开源!

🚑 其他信息

这个有场景吗 就第一次gpt主动发送?

有场景,这是我遇到的:摄像头检测到有人,就主动人脸识别,调用GPT询问、继续以前的对话;人走后清空聊天,再来一个人后再反复进行。 其实细想一下其它的场景也不少,比如在某网站系统中,用户进行了一些操作后,针对这些操作调用GPT主动推送关于这些操作的消息、注意事项给用户,等等,类似的场景。

sivdead commented 8 months ago

我想要在对话时展示函数调用的中间步骤,所以可能用户发送了一条消息,但是我会返回三条消息,感觉跟这个issue的场景有些相似

ONLY-yours commented 8 months ago

现在直接通过受控的方式,setChats 进去消息即可。 @sivdead 但是 Response Stream 和 Loading 这种就暂时没有了

misakayao commented 8 months ago

希望能有触发多个request的能力,类似这个网站的效果,发送一个请求同时有多种模型可以回答,https://openrouter.ai/playground?models=openai/gpt-3.5-turbo,gryphe/mythomax-l2-13b,mistralai/mistral-7b-instruct