Mon May 15 08:55:00 UTC 2023 inscode

上级 e0d07cf1
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
}, },
"dependencies": { "dependencies": {
"axios": "^1.4.0", "axios": "^1.4.0",
"event-source-polyfill": "^1.0.31",
"guess": "^1.0.2", "guess": "^1.0.2",
"view-ui-plus": "^1.3.9", "view-ui-plus": "^1.3.9",
"vue": "^3.2.37" "vue": "^3.2.37"
......
...@@ -8,12 +8,7 @@ ...@@ -8,12 +8,7 @@
</template> </template>
</div> </div>
<div class="question ivu-mt"> <div class="question ivu-mt">
<Input <Input v-model="question" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }" placeholder="输入你的问题" />
v-model="question"
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
placeholder="输入你的问题"
/>
<Row class="ivu-mt"> <Row class="ivu-mt">
<Col> <Col>
<Button type="primary" size="large" icon="md-send" :loading="loading" @click="handleSend">发送</Button> <Button type="primary" size="large" icon="md-send" :loading="loading" @click="handleSend">发送</Button>
...@@ -26,85 +21,118 @@ ...@@ -26,85 +21,118 @@
</div> </div>
</template> </template>
<script> <script>
import axios from 'axios'; import { EventSourcePolyfill } from 'event-source-polyfill';
const token = 'Bearer ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBkQ0k2TkN3aVlYVmtJam9pWXpkbU16WTVOMlpqTldaak5EVmpNR0l5WldFNE5UVTNaRFkxTnpnM1lXVWlMQ0pzZFNJNklrbHVjME52WkdVaUxDSmxlSEFpT2pFMk9EVTFORGczT1Rrc0luVnlJam95TENKcWRHa2lPaUpCVUVsZlZFOUxSVTVmWXpkbU16WTVOMlpqTldaak5EVmpNR0l5WldFNE5UVTNaRFkxTnpnM1lXVXROQ0o5LmlyLTJYa1A4dFhNaFVldnlzTFhkUlJsY1VBV0ZiaWE5em9ZdGN6VlpleFk='; const token = 'Bearer ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBkQ0k2TkN3aVlYVmtJam9pWXpkbU16WTVOMlpqTldaak5EVmpNR0l5WldFNE5UVTNaRFkxTnpnM1lXVWlMQ0pzZFNJNklrbHVjME52WkdVaUxDSmxlSEFpT2pFMk9EVTFORGczT1Rrc0luVnlJam95TENKcWRHa2lPaUpCVUVsZlZFOUxSVTVmWXpkbU16WTVOMlpqTldaak5EVmpNR0l5WldFNE5UVTNaRFkxTnpnM1lXVXROQ0o5LmlyLTJYa1A4dFhNaFVldnlzTFhkUlJsY1VBV0ZiaWE5em9ZdGN6VlpleFk=';
const api = 'https://api.ai100.ai/ai/api/ai/chat'; const api = 'https://api.ai100.ai/ai/api/ai/chat';
export default { export default {
data () { data() {
return { return {
question: '', question: '',
loading: false, loading: false,
dialogs: [] dialogs: []
} }
}, },
methods: { methods: {
handleSend () { handleSend() {
if (this.loading || this.question === '') return; if (this.loading || this.question === '') return;
this.loading = true; this.loading = true;
const question = this.question;
this.question = '';
this.dialogs.push({
id: this.dialogs.length + 1,
role: 'me',
text: question
});
const aiDialogID = this.dialogs.length + 1;
const question = this.question; this.dialogs.push({
this.question = ''; id: aiDialogID,
role: 'ai',
text: 'AI 思考中...'
});
this.dialogs.push({ const query = {
role: 'me', prompt: '',
text: question question,
}); stream: true
}
axios.post(api, const source = new EventSourcePolyfill(
{ `${api}?question=${query.question}&prompt=${query.prompt}&stream=${query.stream}`,
prompt: '', {
question, headers: {
stream: false Accept: '*/*',
}, Authorization: token
{
headers: {
Accept: '*/*',
Authorization: token
}
} }
) }
.then(({ data: res }) => { )
console.log(res);
}) source.onopen = event => {
.finally(() => { console.log("onopen", event);
const dialog = this.dialogs.find(item => item.id === aiDialogID);
dialog.text = '';
};
source.onmessage = event => {
if (event.data === "[DONE]") {
source.close();
this.loading = false; this.loading = false;
}); }
}, if (event.data) {
handleNewChat () { const data = JSON.parse(event.data);
this.dialogs = []; const text = data.message.content.parts.join("");
} console.log(text);
const dialog = this.dialogs.find(item => item.id === aiDialogID);
dialog.text += text;
}
};
source.onerror = event => {
console.log("error", event);
};
},
handleNewChat() {
this.dialogs = [];
} }
} }
}
</script> </script>
<style> <style>
.container{ .container {
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.dialog{
flex: 1; .dialog {
overflow: auto; flex: 1;
} overflow: auto;
.dialog-item{ }
display: flex;
} .dialog-item {
.dialog-item-main{ display: flex;
max-width: 80%; }
padding: 8px;
word-wrap: break-word; .dialog-item-main {
margin-top: 16px; max-width: 80%;
border-radius: 4px; padding: 8px;
} word-wrap: break-word;
.dialog-item-me{ margin-top: 16px;
justify-content: flex-end; border-radius: 4px;
} }
.dialog-item-me .dialog-item-main{
background-color: antiquewhite; .dialog-item-me {
} justify-content: flex-end;
.dialog-item-ai .dialog-item-main{ }
background-color: #eee;
} .dialog-item-me .dialog-item-main {
background-color: antiquewhite;
}
.dialog-item-ai .dialog-item-main {
background-color: #eee;
}
</style> </style>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册