-
-
Notifications
You must be signed in to change notification settings - Fork 969
Open
Labels
enhancementNew feature or requestNew feature or request
Description
需求动机
以下是Bubble.List的role:
const role: BubbleListProps['role'] = {
assistant: { /* ... */ }, // AI助手
user: { /* ... */ }, // 用户
suggest: { /* ... */ }, // 建议问题列表
};
<Bubble.List role={role} />a以下是自定义的DifyRequest:
export class DifyRequest<
Input extends CustomInput = CustomInput,
Output extends CustomOutput = CustomOutput,
> extends AbstractXRequestClass<Input, Output> {
// ...
async run(input: Input): Promise<void> {
const { callbacks } = this.options;
// ... 发起请求、使用 XStream 解析请求体并调用 callbacks?.onUpdate?.() 更新数据
// 请求完成 获取suggest建议问题列表
const suggestList: string[] = await getSuggestList(/* ...一些参数 */);
// 将最终结果通过 onSuccess 回传
callbacks?.onSuccess?.(
[
{ role: 'assistant', content: result, messageId },
{ role: 'suggest', list: suggestList },
] as Output[],
new Headers(),
);
}
}以下是自定义的DifyChatProvider:
export class DifyChatProvider<
ChatMessage extends CustomMessage = CustomMessage,
Input extends CustomInput = CustomInput,
Output extends CustomOutput = CustomOutput,
> extends AbstractChatProvider<ChatMessage, Input, Output> {
// ...
transformMessage(info: TransformMessage<ChatMessage, Output>): ChatMessage {
const { chunk, chunks, status } = info;
// 这里 chunks 是 DifyRequest 中 onSuccess 回传的数组 ChatMessage[]
// 预期的行为是 可直接返回数组 ChatMessage[]
// 但实际并不支持 只能返回单个的 ChatMessage
// 我的理解是,现在的 transformMessage 不支持 return 数组,那 onSuccess 支持回传数组好像没什么意义?
// 反过来说,现在的 onSuccess 支持回传数组,那 transformMessage 应该也能 return 数组比较合理吧?
// 这两边似乎应该统一一下?
if (status === 'success') {
return chunks;
}
// 返回 update 回传的数据,更新 message
// ...
return chunk;
}
}提议的 API 是什么样的?
AbstractChatProvider.transformMessage 支持返回数组,或 callbacks.onSuccess 仅支持回传单个值,两边统一。
现在这样 onSuccess 支持回传数组但 transformMessage 仅支持返回单个值,没 get 到有什么用途和意义。
dosubot
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request