lke-component 1.1.19-beta-13 → 1.1.19-beta-16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +244 -53
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,21 +1,224 @@
1
1
  # lke-component
2
2
 
3
- 知识引擎大模型对话消息渲染组件,适用于基于vue2和react搭建的项目。
3
+ [English](#english) | [中文](#中文)
4
4
 
5
- 其它项目环境参考
6
- * 基于vue3的项目参考 [链接](https://www.npmjs.com/package/lke-component-vue3)
5
+ ---
7
6
 
8
- * 基于react的项目参考 [链接](#react)
7
+ <a id="english"></a>
9
8
 
10
- * 小程序参考 [链接](https://www.npmjs.com/package/lke-utils)
9
+ ## English
10
+
11
+ Message rendering component for LKE (Large Knowledge Engine) conversations, designed for Vue2 and React projects.
12
+
13
+ For other environments:
14
+ * Vue3 projects: [Link](https://www.npmjs.com/package/lke-component-vue3)
15
+ * React projects: [Link](#usage-in-react-projects)
16
+ * Mini Programs: [Link](https://www.npmjs.com/package/lke-utils)
17
+
18
+ ### Components
19
+
20
+ Four components are provided: `LkeMsg`, `MsgContent`, `MsgLoading`, `MsgThought`
21
+
22
+ **MsgLoading**: Shows model loading state
23
+
24
+ ```
25
+ props:
26
+ loadingIcon: String, // Message icon, displays if provided
27
+ loadingMessage: Boolean, // Whether in loading state
28
+ loadingText: String, // Loading message content
29
+ transferStatus: Boolean // Transfer to human agent status
30
+ ```
31
+
32
+ **MsgContent**: Renders Markdown content
33
+
34
+ ```
35
+ props:
36
+ content: String, // Markdown message
37
+ isFinal: Boolean, // Whether the message output is complete
38
+ isReplaceLinks: Boolean, // Whether to replace links with third-party prompts
39
+ styleObj: Object, // Style object for MD message body
40
+ clazzTable: String, // Table class for MD message body (default styles will be added)
41
+ clazzMd: String, // Class for MD message body
42
+ anchorAttributes: Object, // Props passed to vue-markdown, see example
43
+ linkify: Boolean // Props passed to vue-markdown, see example
44
+ ```
45
+
46
+ **LkeMsg**: Aggregated component combining the above
47
+
48
+ ```
49
+ props:
50
+ LoadingIcon: String, // CDN URL for loading icon, not displayed if not provided
51
+ type: String, // Current message type, usually 'reply' or 'token_stat'
52
+ isReplaceLinks: Boolean, // Whether to replace with LLM third-party link prompts
53
+ showProcedures: Boolean, // Whether to show model output status
54
+ transferStatus: Boolean, // Transfer to human agent status
55
+ clazz: String, // Class name for outer wrapper div
56
+ item: Object, // Current message content
57
+ styleObj: Object, // Style object for MD message body
58
+ clazzTable: String, // Table class for MD message body, default styles: table-style, table
59
+ clazzMd: String, // Class for MD message body, default style: answer-md
60
+ anchorAttributes: Object, // Props passed to vue-markdown, see example
61
+ linkify: Boolean // Props passed to vue-markdown, see example
62
+ printCount: Number | undefined // Characters per print for timing control
63
+ hideCursorPoint: Boolean | undefined // Whether to show print cursor icon
64
+ ```
65
+
66
+ **MsgThought**: Renders DeepSeek thinking content
67
+
68
+ ```
69
+ props:
70
+ content: String // Thinking content
71
+ title: String // Title, e.g., "Thinking Complete"
72
+ titleIcon: String // Small icon, 16x16px
73
+ nodeName: String // Optional, e.g., "deepseek"
74
+ status: String // Thinking status: 'success', 'failed', 'processing', 'stop'
75
+ elapsed: number // Time spent thinking in milliseconds, e.g., 17485
76
+ ```
77
+
78
+ ### Usage in Vue2 Projects
79
+
80
+ 1. Install and import
81
+
82
+ ```js
83
+ // Import in Vue entry file
84
+ import lkeComponent from 'lke-component';
85
+ Vue.use(lkeComponent);
86
+
87
+ // Use in Vue pages
88
+ <!-- Loading toggle + Markdown rendering -->
89
+ <LkeMsg :loadingIcon="loadingIcon" :loadingMessage="item.loading_message" :loadingText="item.text" :transferStatus="transferStatus" :isReplaceLinks="true" :content="item.content" :isFinal="item.is_final" />
90
+
91
+ <!-- Show temporary [Thinking...] message when not transferring to human -->
92
+ <MsgLoading :loadingIcon="loadingIcon" :loadingMessage="item.loading_message" :loadingText="item.text" :transferStatus="transferStatus" />
93
+
94
+ <!-- DeepSeek thinking content rendering -->
95
+ <MsgThought
96
+ :content="thinkingContent"
97
+ :title="thinkingTitle"
98
+ :titleIcon="test.png"
99
+ :nodeName="deepseek"
100
+ :status="success"
101
+ :elapsed="17485"
102
+ />
103
+
104
+ <!-- Markdown rendering -->
105
+ <MsgContent :isReplaceLinks="true" :loadingMessage="item.loading_message" :content="item.content" :isFinal="item.is_final" :printCount="1" :hideCursorPoint="true"/>
106
+ ```
107
+
108
+ 2. Import method
109
+
110
+ ```js
111
+ // Import in Vue file, e.g., component.vue
112
+ import { MsgLoading, MsgContent, MsgThought } from '@tencent/lke-component';
113
+
114
+ // Register components
115
+ export default {
116
+ components: {
117
+ MsgContent,
118
+ MsgLoading,
119
+ MsgThought,
120
+ }
121
+ }
122
+
123
+ // Use in template
124
+ <MsgLoading :loadingIcon="loadingIcon" :loadingMessage="item.loading_message" :loadingText="item.text" :transferStatus="transferStatus" />
125
+
126
+ <!-- Markdown rendering -->
127
+ <MsgContent :isReplaceLinks="true" :loadingMessage="item.loading_message" :content="item.content" :isFinal="item.is_final" />
128
+
129
+ <!-- DeepSeek thinking content rendering -->
130
+ <MsgThought
131
+ :content="thinkingContent"
132
+ :title="thinkingTitle"
133
+ :titleIcon="test.png"
134
+ :nodeName="deepseek"
135
+ :status="success"
136
+ :elapsed="17485"
137
+ />
138
+ ```
139
+
140
+ ### Usage in React Projects
141
+
142
+ ```jsx
143
+ import { MsgContent, MsgThought } from "lke-component/react";
144
+ import "lke-component/css";
11
145
 
146
+ const App = () => {
147
+ const [list, setList] = useState([{
148
+ content: "Nice weather today<b>?</b>",
149
+ isFinal: true,
150
+ loadingMessage: false,
151
+ isReplaceLinks: false,
152
+ styleObj: {},
153
+ clazzTable: '',
154
+ clazzMd: '',
155
+ anchorAttributes: {},
156
+ id: 1,
157
+ linkify: false,
158
+ thoughts: [{
159
+ title: "Thinking Complete",
160
+ titleIcon: 'test.png',
161
+ nodeName: "deepseek",
162
+ status: "success",
163
+ detailVisible: true,
164
+ elapsed: 17485,
165
+ content: `Okay, I need to process the user's question...`,
166
+ }]
167
+ }]);
12
168
 
13
- ## 组件介绍
169
+ return (
170
+ <div className="main">
171
+ {list.map((item, index) => (
172
+ <div>
173
+ {item.thoughts.map((thought, index) => (
174
+ <MsgThought
175
+ key={index}
176
+ detailVisible={thought.detailVisible}
177
+ content={thought.content}
178
+ title={thought.title}
179
+ titleIcon={thought.titleIcon}
180
+ nodeName={thought.nodeName}
181
+ status={thought.status}
182
+ elapsed={thought.elapsed}
183
+ onTitleClick={() => void 0}
184
+ />
185
+ ))}
186
+ </div>
187
+ <MsgContent
188
+ key={id}
189
+ content={item.content}
190
+ isFinal={item.isFinal}
191
+ styleObj={item.styleObj}
192
+ clazzTable={item.clazzTable}
193
+ clazzMd={item.clazzMd}
194
+ anchorAttributes={item.anchorAttributes}
195
+ linkify={item.linkify}
196
+ isReplaceLinks={item.isReplaceLinks}
197
+ />
198
+ ))}
199
+ </div>
200
+ );
201
+ }
202
+ ```
14
203
 
15
- 提供三个组件:LkeMsg、MsgContent、MsgLoading
204
+ ---
16
205
 
206
+ <a id="中文"></a>
17
207
 
18
- MsgLoading: 展示模型加载中的状态
208
+ ## 中文
209
+
210
+ 知识引擎大模型对话消息渲染组件,适用于基于vue2和react搭建的项目。
211
+
212
+ 其它项目环境参考
213
+ * 基于vue3的项目参考 [链接](https://www.npmjs.com/package/lke-component-vue3)
214
+ * 基于react的项目参考 [链接](#在react项目中使用)
215
+ * 小程序参考 [链接](https://www.npmjs.com/package/lke-utils)
216
+
217
+ ### 组件介绍
218
+
219
+ 提供四个组件:LkeMsg、MsgContent、MsgLoading、MsgThought
220
+
221
+ **MsgLoading**: 展示模型加载中的状态
19
222
 
20
223
  ```
21
224
  props:
@@ -25,7 +228,8 @@ props:
25
228
  transferStatus: Boolean // 转人工状态
26
229
  ```
27
230
 
28
- MsgContent 展示MD内容
231
+ **MsgContent**: 展示MD内容
232
+
29
233
  ```
30
234
  props:
31
235
  content: String, // MD消息
@@ -38,7 +242,8 @@ props:
38
242
  linkify: Boolean // vue-markdown 的props透传,见示例
39
243
  ```
40
244
 
41
- LkeMsg 两个组件的聚合态
245
+ **LkeMsg**: 两个组件的聚合态
246
+
42
247
  ```
43
248
  props:
44
249
  LoadingIcon: String, // 加载中的图标CDN地址,如果没有传的话,默认不显示图标
@@ -57,28 +262,30 @@ props:
57
262
  hideCursorPoint: Boolean | undefined //是否显示打印的图标
58
263
  ```
59
264
 
60
- MsgThought 渲染deepseek 的思考内容
265
+ **MsgThought**: 渲染deepseek 的思考内容
266
+
61
267
  ```
62
268
  props:
63
269
  content: String // 思考内容
64
- title: String // 标题,如“思考完成"
270
+ title: String // 标题,如"思考完成"
65
271
  titleIcon: String // 图标小图标icon 大小16x16px
66
- nodeName: String // 可不填,如”deepseek
272
+ nodeName: String // 可不填,如"deepseek"
67
273
  status: String // 思考状态,可选值'success', 'failed', 'processing', 'stop'
68
274
  elapsed: number // 思考花费时间, 毫秒,如17485
69
275
  ```
70
276
 
71
- ## 在vue2项目里使用
277
+ ### 在vue2项目里使用
278
+
72
279
  1. install方式引入
73
280
 
74
- ```
281
+ ```js
75
282
  // 在vue的入口文件引入组件库
76
283
  import lkeComponent from 'lke-component';
77
284
  Vue.use(lkeComponent);
78
285
 
79
286
  // 在对应的vue页面里面使用组件
80
287
  <!-- Loading切换 + Markdown渲染 -->
81
- <LkeMsg :loadingIcon="loadingIcon" :loadingMessage="item.loading_message" :loadingText="item.text" :transferStatus="transferStatus" :isReplaceLinks="true" :content="item.content" :isFinal="item.is_final" :clazzMd="`question-text ${webIMSource === 'client' && isMobile ? 'question-text-mobile' : ''}`" :styleObj="{ 'max-width': webIMSource === 'client' && isMobile ? '352px' : '680px' }" />
288
+ <LkeMsg :loadingIcon="loadingIcon" :loadingMessage="item.loading_message" :loadingText="item.text" :transferStatus="transferStatus" :isReplaceLinks="true" :content="item.content" :isFinal="item.is_final" />
82
289
 
83
290
  <!-- 非转人工情况下, 展示临时[正在思考中]消息 -->
84
291
  <MsgLoading :loadingIcon="loadingIcon" :loadingMessage="item.loading_message" :loadingText="item.text" :transferStatus="transferStatus" />
@@ -94,11 +301,12 @@ Vue.use(lkeComponent);
94
301
  />
95
302
 
96
303
  <!-- Markdown渲染 -->
97
- <MsgContent :isReplaceLinks="true" :loadingMessage="item.loading_message" :content="item.content" :isFinal="item.is_final" :clazzMd="`question-text ${webIMSource === 'client' && isMobile ? 'question-text-mobile' : ''}`" :styleObj="{ 'max-width': webIMSource === 'client' && isMobile ? '352px' : '680px' }" :printCount="1" :hideCursorPoint="true"/>
304
+ <MsgContent :isReplaceLinks="true" :loadingMessage="item.loading_message" :content="item.content" :isFinal="item.is_final" :printCount="1" :hideCursorPoint="true"/>
98
305
  ```
99
306
 
100
307
  2. import方式引入
101
- ```
308
+
309
+ ```js
102
310
  // 在需要使用此组件的vue文件,比如component.vue中引入
103
311
  import { MsgLoading, MsgContent, MsgThought } from '@tencent/lke-component';
104
312
 
@@ -114,9 +322,8 @@ export default {
114
322
  // 在template标签中使用
115
323
  <MsgLoading :loadingIcon="loadingIcon" :loadingMessage="item.loading_message" :loadingText="item.text" :transferStatus="transferStatus" />
116
324
 
117
-
118
325
  <!-- Markdown渲染 -->
119
- <MsgContent :isReplaceLinks="true" :loadingMessage="item.loading_message" :content="item.content" :isFinal="item.is_final" :clazzMd="`question-text ${webIMSource === 'client' && isMobile ? 'question-text-mobile' : ''}`" :styleObj="{ 'max-width': webIMSource === 'client' && isMobile ? '352px' : '680px' }" />
326
+ <MsgContent :isReplaceLinks="true" :loadingMessage="item.loading_message" :content="item.content" :isFinal="item.is_final" />
120
327
 
121
328
  <!-- deepseek 思考内容渲染 -->
122
329
  <MsgThought
@@ -127,50 +334,34 @@ export default {
127
334
  :status="success"
128
335
  :elapsed="17485"
129
336
  />
130
-
131
337
  ```
132
338
 
339
+ ### 在react项目中使用
133
340
 
134
-
135
-
136
- ## 在react项目中使用
137
-
138
- <div id="react"></div>
139
-
140
- ```
341
+ ```jsx
141
342
  import { MsgContent, MsgThought } from "lke-component/react";
142
343
  import "lke-component/css";
143
344
 
144
345
  const App = () => {
145
346
  const [list, setList] = useState([{
146
347
  content: "天气不错哦<b>?</b>",
147
- isFinal: true, // 消息是否输出结束
148
- loadingMessage: false, // 是否加载中
149
- isReplaceLinks: false, // 是否替换链接为第三方提示
150
- styleObj: {}, // MD消息体的style
151
- clazzTable: '', // MD消息体的 table 样式
152
- clazzMd: '', // MD消息体的类名
153
- anchorAttributes: {}, // 为链接添加自定义属性,如{target: '_blank'}
348
+ isFinal: true,
349
+ loadingMessage: false,
350
+ isReplaceLinks: false,
351
+ styleObj: {},
352
+ clazzTable: '',
353
+ clazzMd: '',
354
+ anchorAttributes: {},
154
355
  id: 1,
155
- linkify: false // markdown-it 的props透传
356
+ linkify: false,
156
357
  thoughts: [{
157
- title: "思考完成", // 标题
158
- titleIcon: 'test.png', // 标题旁的icon,后端一般返回 emoji 图标地址
159
- nodeName: "deepseek", // 非必传,显示大模型名称
160
- status: "success", // 思考状态,用来显示不同状态 icon
161
- detailVisible: true, // 控制思考内容区域是否显示,配合onTitleClick,可以控制思考内容展开和收起
162
- elapsed: 17485, // 思考时间,单位 ms
163
- content: ` // // 思考内容
164
- 好的,我现在需要处理用户的问题“你好”,并根据提供的搜索结果生成一个回答,同时正确引用来源。首先,用户的问题是一个常见的问候语,所以答案应该解释“你好”的含义和用法。
165
-
166
- 看一下搜索结果的各个条目。结果1到4、7、8都是关于“你好”这个词语的解释,包括它的拼音、用法、近义词等。而结果5、6、9是关于韩国电影《你好》的信息,和用户的问题无关,可以忽略。
167
-
168
- 接下来,我需要从相关的结果中提取关键信息。例如,结果1提到“你好”是用于礼貌的打招呼或问候,适用于非熟人群体。结果2和3也给出了类似的解释,并指出它是汉语中的常用敬语。结果4详细介绍了“你好”的不同解释,包括网络解释和基础解释。结果7和8补充了其作为打招呼的敬语用法。
169
-
170
- 需要将这些信息整合成一个连贯的回答,并用正确的引用标注。例如,综合结果1、2、3、4、7、8的内容,说明“你好”的基本含义、用法以及适用场合。注意不要提到电影相关的信息,因为与问题无关。
171
-
172
- 最后,确保回答简洁明了,使用中文口语化表达,避免使用Markdown格式,并在适当的位置添加引用,如[1](@ref)、[2](@ref)等。同时,根据当前时间2025年2月19日,用户的问题只是问候,不需要时间相关的调整,所以直接回答即可。
173
- `,
358
+ title: "思考完成",
359
+ titleIcon: 'test.png',
360
+ nodeName: "deepseek",
361
+ status: "success",
362
+ detailVisible: true,
363
+ elapsed: 17485,
364
+ content: `好的,我现在需要处理用户的问题...`,
174
365
  }]
175
366
  }]);
176
367
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lke-component",
3
- "version": "1.1.19-beta-13",
3
+ "version": "1.1.19-beta-16",
4
4
  "main": "dist/lke-component.umd.js",
5
5
  "module": "dist/lke-component.esm.js",
6
6
  "files": [