import { UserOutlined } from '@ant-design/icons';
import { Bubble, Sender, useXAgent, useXChat, XRequest } from '@ant-design/x';
import { Flex, type GetProp } from 'antd';
import React from 'react';
const roles: GetProp<typeof Bubble.List, 'roles'> = {
ai: {
placement: 'start',
avatar: { icon: <UserOutlined />, style: { background: '#fde3cf' } },
},
local: {
placement: 'end',
avatar: { icon: <UserOutlined />, style: { background: '#87d068' } },
},
};
const App = () => {
const [content, setContent] = React.useState('');
const { create } = XRequest({
model: '',
baseURL: '',
});
// Agent for request
const [agent] = useXAgent({
request: async ({ message }, { onSuccess, onUpdate, onError }) => {
let fullContent = '';
try {
create(
{
messages: [{ role: 'user', content: message }],
stream: true,
},
{
onUpdate: (chunk) => {
// console.log('sse object', chunk);
if (chunk.data !== '[DONE]') {
const data = JSON.parse(chunk.data);
fullContent += data?.choices[0].delta.content;
onUpdate(fullContent);
}
},
onSuccess: (chunks) => {
// console.log('sse chunk list', chunks);
onSuccess(fullContent);
},
onError: (error) => {
// console.log('error', error);
onError(error);
},
},
);
} catch (error) {
onError(error);
}
},
});
// Chat messages
const { onRequest, messages } = useXChat({
agent,
});
return (
<Flex vertical gap="middle">
<Bubble.List
roles={roles}
style={{ maxHeight: 300 }}
items={messages.map(({ id, message, status }) => ({
key: id,
role: status === 'local' ? 'local' : 'ai',
content: message,
}))}
/>
<Sender
loading={agent.isRequesting()}
value={content}
onChange={setContent}
onSubmit={(nextContent) => {
onRequest(nextContent);
setContent('');
}}
/>
</Flex>
);
};
export default App;
url = f""
data = {
"model": model,
"messages": messages,
"stream": True
}
response = requests.post(url, headers=headers, json=data, stream=True)
exec_time = time.time() - start_time
print(f"首帧响应: 耗时[{getHMS(round(exec_time * 1000))}]")
for line in response.iter_lines():
if line:
print(datetime.datetime.now().strftime('%H:%M:%S.%f')[:-3] + ' ' + line.decode('utf-8'))
重现步骤
``参考 https://ant-design-x.antgroup.com/components/use-x-chat-cn 流式输出,
重现代码如下:
当前行为
XRequest + request/useXAgent + useXChat 响应如下(不满足预期效果,onUpdate 无法第一时间获取到首帧响应):
预期行为
Python 直接流式调用(预期效果):

上下文
Python 复现代码:
版本
1.1.1
您在哪些浏览器上遇到了这个问题?