Skip to content

Commit 6085c49

Browse files
committed
支持文档解读
1 parent 14a1a65 commit 6085c49

File tree

13 files changed

+53
-23
lines changed

13 files changed

+53
-23
lines changed

src/renderer/src/components/views/chat2assistant/chat-window/ChatWindowFileList.vue

+22-3
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ const selectFileRequest = (option: RequestOption) => {
2323
title-align="start"
2424
width="80vw"
2525
>
26-
<template #title>{{ $t('chatWindow.selectFile') }}</template>
26+
<template #title>{{ $t('chatWindow.fileList.title') }}</template>
2727
<div class="file-list-page">
28+
<a-alert class="file-list-page-tip">{{ $t('chatWindow.fileList.tip') }}</a-alert>
2829
<a-upload
2930
v-model:file-list="selectFileList"
3031
:custom-request="selectFileRequest"
@@ -40,7 +41,25 @@ const selectFileRequest = (option: RequestOption) => {
4041
<style lang="less" scoped>
4142
.file-list-page {
4243
height: 60vh;
43-
overflow-x: hidden;
44-
overflow-y: auto;
44+
display: flex;
45+
flex-direction: column;
46+
gap: 10px;
47+
48+
.file-list-page-tip {
49+
flex-shrink: 0;
50+
}
51+
52+
:deep(.arco-upload-wrapper) {
53+
flex-grow: 1;
54+
min-height: 0;
55+
display: flex;
56+
flex-direction: column;
57+
gap: 10px;
58+
59+
.arco-upload-list {
60+
overflow-x: hidden;
61+
overflow-y: auto;
62+
}
63+
}
4564
}
4665
</style>

src/renderer/src/i18n/local/en_US.json

+2
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@
252252
"MoonshotAI": "Moonshot AI call error, please check your configuration"
253253
},
254254
"fileList": {
255+
"title": "Document list",
256+
"tip": "Note that the total number of words in the document cannot exceed the large model Token limit!",
255257
"select": "Select document"
256258
},
257259
"stop": "Stop",

src/renderer/src/i18n/local/zh_CN.json

+2
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@
252252
"MoonshotAI": "月之暗面大模型调用错误"
253253
},
254254
"fileList": {
255+
"title": "文档列表",
256+
"tip": "注意文档总字数不能超过大模型 Token 限制!",
255257
"select": "选择文档"
256258
},
257259
"stop": "停止",

src/renderer/src/utils/big-model/base-util.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import chatModels from '@renderer/assets/json/chat-models.json'
33
import i18n from '@renderer/i18n'
44
import { useNotificationStore } from '@renderer/store/notification'
55
import { getChatTokensLength } from '@renderer/utils/gpt-tokenizer-util'
6+
import { langChainLoadFile } from '@renderer/utils/ipc-util'
67

78
// 多语言
89
const { t } = i18n.global
@@ -21,13 +22,21 @@ export const defaultAssistant = {
2122
speechSpeed: 1.0
2223
}
2324

24-
export const turnChat = (chatMessageList: ChatMessage[]) => {
25-
// 将消息历史处理为user和assistant轮流对话
25+
export const turnChat = async (chatMessageList: ChatMessage[]) => {
26+
// 消息格式转换
2627
const messages: BaseMessage[] = []
2728
let currentRole = 'user' as 'user' | 'assistant'
2829
for (let i = chatMessageList.length - 1; i >= 0; i--) {
2930
const chatMessage = chatMessageList[i]
3031
if (currentRole === chatMessage.role) {
32+
// 将文件内容拼接到用户消息中
33+
if (chatMessage.fileList && chatMessage.fileList.length > 0) {
34+
const fileContentList: Record<string, string> = {}
35+
for (const f of chatMessage.fileList) {
36+
fileContentList[f.name] = await langChainLoadFile(f.path)
37+
}
38+
chatMessage.content = `Files Data:\n${JSON.stringify(fileContentList)}\n${chatMessage.content}`
39+
}
3140
messages.unshift({
3241
role: chatMessage.role,
3342
content: chatMessage.content,

src/renderer/src/utils/big-model/ernie-bot-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ export const getERNIEMessages = async (
112112
chatMessageList.at(-1)!.content = `${instruction}\n${chatMessageList.at(-1)!.content}`
113113
}
114114

115-
// 将消息历史处理为user和assistant轮流对话
116-
let messages = turnChat(chatMessageList)
115+
// 消息格式转换
116+
let messages = await turnChat(chatMessageList)
117117

118118
// 截取指定长度的上下文
119119
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/big-model/gemini-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ export const getGeminiMessages = async (
140140
chatMessageList.at(-1)!.content = `${instruction}\n${chatMessageList.at(-1)!.content}`
141141
}
142142

143-
// 将消息历史处理为user和assistant轮流对话
144-
let messages = turnChat(chatMessageList)
143+
// 消息格式转换
144+
let messages = await turnChat(chatMessageList)
145145

146146
// 截取指定长度的上下文
147147
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/big-model/moonshot-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ export const getMoonshotAIMessages = async (
6161
inputMaxTokens: number | undefined,
6262
contextSize: number
6363
) => {
64-
// 将消息历史处理为user和assistant轮流对话
65-
let messages = turnChat(chatMessageList)
64+
// 消息格式转换
65+
let messages = await turnChat(chatMessageList)
6666

6767
// 截取指定长度的上下文
6868
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/big-model/ollama-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ export const getOllamaMessages = async (
8888
inputMaxTokens: number | undefined,
8989
contextSize: number
9090
) => {
91-
// 将消息历史处理为user和assistant轮流对话
92-
let messages = turnChat(chatMessageList)
91+
// 消息格式转换
92+
let messages = await turnChat(chatMessageList)
9393

9494
// 截取指定长度的上下文
9595
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/big-model/openai-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ export const getOpenAIMessages = async (
127127
inputMaxTokens: number | undefined,
128128
contextSize: number
129129
) => {
130-
// 将消息历史处理为user和assistant轮流对话
131-
let messages = turnChat(chatMessageList)
130+
// 消息格式转换
131+
let messages = await turnChat(chatMessageList)
132132

133133
// 截取指定长度的上下文
134134
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/big-model/spark-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ export const getSparkMessages = async (
200200
inputMaxTokens: number | undefined,
201201
contextSize: number
202202
) => {
203-
// 将消息历史处理为user和assistant轮流对话
204-
let messages = turnChat(chatMessageList)
203+
// 消息格式转换
204+
let messages = await turnChat(chatMessageList)
205205

206206
// 截取指定长度的上下文
207207
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/big-model/tiangong-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ export const getTiangongMessages = async (
115115
inputMaxTokens: number | undefined,
116116
contextSize: number
117117
) => {
118-
// 将消息历史处理为user和assistant轮流对话
119-
let messages = turnChat(chatMessageList)
118+
// 消息格式转换
119+
let messages = await turnChat(chatMessageList)
120120

121121
// 截取指定长度的上下文
122122
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/big-model/tongyi-util.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ export const getTongyiMessages = async (
239239
model: string,
240240
apiKey: string | undefined
241241
) => {
242-
// 将消息历史处理为user和assistant轮流对话
243-
let messages = turnChat(chatMessageList)
242+
// 消息格式转换
243+
let messages = await turnChat(chatMessageList)
244244

245245
// 截取指定长度的上下文
246246
messages = limitContext(inputMaxTokens, contextSize, messages)

src/renderer/src/utils/markdown-util.ts

-2
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,12 @@ export const renderMarkdown = (content: string, isLoading: boolean) => {
5555
// 加载中,显示闪烁光标
5656
const endFlag = '【end】'
5757
let htmlCode = markdown.render(content + endFlag)
58-
console.log(htmlCode)
5958
// 找到结束标识
6059
const endFlagIndex = htmlCode.lastIndexOf(endFlag)
6160
// 插入光标元素
6261
htmlCode =
6362
htmlCode.substring(0, endFlagIndex) +
6463
`<span class="chat-message-loading">丨</span>` +
6564
htmlCode.substring(endFlagIndex + endFlag.length)
66-
console.log(htmlCode)
6765
return htmlCode
6866
}

0 commit comments

Comments
 (0)