Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
冯丙见
AI私人知识库
提交
bb44e587
A
AI私人知识库
项目概览
冯丙见
/
AI私人知识库
与 Fork 源项目一致
Fork自
冯丙见 / AI绘图
通知
1
Star
128
Fork
113
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AI私人知识库
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
bb44e587
编写于
1月 11, 2024
作者:
W
weixin_44463441
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Thu Jan 11 19:54:00 CST 2024 inscode
上级
2b8e60df
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
58 addition
and
81 deletion
+58
-81
src/App.vue
src/App.vue
+27
-59
src/components/content/index.vue
src/components/content/index.vue
+28
-9
src/js/repEs.js
src/js/repEs.js
+3
-13
未找到文件。
src/App.vue
浏览文件 @
bb44e587
<
template
>
<
template
>
<div
class=
"w-full h-screen"
>
<div
class=
"w-full h-screen"
>
<!-- toolbar -->
<!-- toolbar -->
<div
class=
"w-full h-14 pt-2 border-b-2 shadow-2xl text-center fixed bg-slate-200"
>
<div
class=
"w-full h-14 pt-2 border-b-2 shadow-2xl fixed bg-slate-200 flex items-center"
>
<a
href=
"#/llm-rep/app/"
>
<div
class=
"flex-none w-1/3"
>
</div>
<div
class=
"flex-none w-1/3 text-center"
>
<span
class=
"leading-10 font-bold"
>
{{
name
}}
{{
config
?.
mode
===
'
completions
'
?
'
(无上下文)
'
:
''
}}
</span>
</div>
<div
class=
"flex-none w-1/3 *:ml-4 *:text-gray-600 *:hover:text-gray-900 text-sm float-right flex justify-end pr-4"
>
<button
@
click=
"page='chat'"
>
Chat
</button>
<button
@
click=
"page='content'"
>
知识库
</button>
<button>
设置
</button>
<svg
xmlns=
"http://www.w3.org/2000/svg"
fill=
"none"
viewBox=
"0 0 24 24"
stroke-width=
"1.5"
stroke=
"currentColor"
<svg
xmlns=
"http://www.w3.org/2000/svg"
fill=
"none"
viewBox=
"0 0 24 24"
stroke-width=
"1.5"
stroke=
"currentColor"
class=
"w-4 h-4
absolute left-4 top-5
"
>
class=
"w-4 h-4
cursor-pointer inline"
@
click=
"cleanHistory
"
>
<path
stroke-linecap=
"round"
stroke-linejoin=
"round"
<path
stroke-linecap=
"round"
stroke-linejoin=
"round"
d=
"M
2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25
"
/>
d=
"M
14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0
"
/>
</svg>
</svg>
</a>
</div>
<span
class=
"leading-10 font-bold"
>
{{
name
}}
{{
config
?.
mode
===
'
completions
'
?
'
(无上下文)
'
:
''
}}
</span>
<svg
xmlns=
"http://www.w3.org/2000/svg"
fill=
"none"
viewBox=
"0 0 24 24"
stroke-width=
"1.5"
stroke=
"currentColor"
class=
"w-4 h-4 absolute right-4 top-5 cursor-pointer"
@
click=
"cleanHistory"
>
<path
stroke-linecap=
"round"
stroke-linejoin=
"round"
d=
"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"
/>
</svg>
</div>
</div>
<!-- main content -->
<!-- main content -->
<div
class=
"flex w-full h-full pt-14"
>
<div
class=
"flex w-full h-full pt-14"
>
<!-- left -->
<div
class=
"flex-none w-0 md:w-[260px] bg-slate-200 border-r-2 hidden md:block p-8 text-sm"
>
<div
v-if=
"page === 'content'"
class=
"w-full bg-slate-300 md:bg-slate-300 p-2 sm:p-8"
>
<t-form
labelAlign=
"top"
>
<content/>
<t-form-item
label=
"GPT服务器类型"
name=
"sdServerType"
>
<t-select
v-model=
"sdServerType"
@
change=
"handleSDServerTypeChange"
class=
"bg-gray-200"
style=
"background: #ccc;font-size:12px;"
>
<t-option
v-for=
"(item, index) in sdServerTypeOptions"
:key=
"index"
:value=
"item.value"
:label=
"item.label"
>
{{
item
.
label
}}
</t-option>
</t-select>
</t-form-item>
<t-form-item
label=
"服务器地址"
name=
"sdServerUrl"
>
<t-textarea
placeholder=
"请输入内容"
v-model=
"sdServerUrl"
:autosize=
"true"
@
change=
"saveConfig"
/>
</t-form-item>
</t-form>
<t-card
class=
"bg-orange-100 mt-8 text-gray-600 text-sm"
v-if=
"sdServerType === 'common'"
>
公共服务器为临时提供的测试服务器,可能存在需要排队或随时下线的可能。
<br/>
建议使用
<t-tooltip
content=
'购买后上面服务器地址填写 工作台-小羊驼 域名,同时把端口换成8000,并添加"/v1"后缀'
theme=
"primary"
>
<t-link
href=
"https://inscode.csdn.net/gpu?utm_source=sd_app"
target=
"_blank"
:suffix-icon=
"renderSuffixIcon"
underline
>
私有服务器
</t-link>
</t-tooltip>
</t-card>
<t-form
labelAlign=
"top"
label-width=
"100"
:style=
"
{display: showProfileSetting ? 'block':'none'}">
<t-form-item
label=
"机器人头像"
>
<!--
<t-input
placeholder=
"请输入内容"
v-model=
"config.robot_img"
/>
-->
<t-space
direction=
"vertical"
align=
"center"
v-for=
"imgItem in robotAvatarList"
class=
"mr-2 cursor-pointer hover:bg-blue-600"
>
<t-image
class=
"rounded-lg border-2 "
:class=
"
{ 'border-blue-800': imgItem.src === config.robot_img }"
@click="changeRobotAvatar(imgItem.src)" :src="imgItem.src" fit="cover"
:style="{ width: '40px', height: '40px' }" />
<!--
<span>
{{
imgItem
.
name
}}
</span>
-->
</t-space>
</t-form-item>
<t-form-item
label=
"你的头像"
>
<t-space
direction=
"vertical"
align=
"center"
v-for=
"imgItem in userAvatarList"
class=
"mr-2 cursor-pointer hover:bg-blue-600"
>
<t-image
class=
"rounded-lg border-2 "
:class=
"
{ 'border-blue-800': imgItem.src === config.user_img }"
@click="changeUserAvatar(imgItem.src)" :src="imgItem.src" fit="cover"
:style="{ width: '40px', height: '40px' }" />
<!--
<span>
{{
imgItem
.
name
}}
</span>
-->
</t-space>
</t-form-item>
<t-form-item
label=
"机器人对你的称呼"
help=
"多个称呼用逗号隔开"
>
<t-input
v-model=
"config.user_call_name"
/>
</t-form-item>
</t-form>
</div>
</div>
<!-- right -->
<!-- right -->
<div
class=
"flex-auto bg-slate-300 md:bg-slate-300 p-2 sm:p-8"
>
<div
class=
"flex-auto bg-slate-300 md:bg-slate-300 p-2 sm:p-8"
v-else
>
<content/>
<div
class=
"w-full bg-slate-200 h-full m-auto relative container max-w-6xl rounded-xl"
>
<div
class=
"w-full bg-slate-200 h-full m-auto relative container max-w-6xl rounded-xl"
>
<div
class=
"w-full h-full pb-24 p-4 overflow-y-auto overflow-x-hidden"
ref=
"messageList"
>
<div
class=
"w-full h-full pb-24 p-4 overflow-y-auto overflow-x-hidden"
ref=
"messageList"
>
...
@@ -188,6 +155,7 @@ export default {
...
@@ -188,6 +155,7 @@ export default {
},
},
data
()
{
data
()
{
return
{
return
{
page
:
''
,
id
:
0
,
id
:
0
,
name
:
'
加载中...
'
,
name
:
'
加载中...
'
,
userAvatarList
:
[],
userAvatarList
:
[],
...
...
src/components/content/index.vue
浏览文件 @
bb44e587
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
<div
class=
"p-4"
>
<div
class=
"p-4"
>
<span>
添加内容
</span>
<span>
添加内容
</span>
<textarea
class=
"block my-2 w-full"
v-model=
"newContent"
></textarea>
<textarea
class=
"block my-2 w-full"
v-model=
"newContent"
maxLength=
"512"
></textarea>
<button
class=
"bg-gray-300 py-2 px-4 rounded hover:bg-gray-400"
@
click=
"add"
>
add
</button>
<button
class=
"bg-gray-300 py-2 px-4 rounded hover:bg-gray-400"
@
click=
"add"
>
add
</button>
<button
class=
"bg-gray-300 py-2 px-4 rounded hover:bg-gray-400 ml-2"
@
click=
"search"
>
search
</button>
<button
class=
"bg-gray-300 py-2 px-4 rounded hover:bg-gray-400 ml-2"
@
click=
"search"
>
search
</button>
...
@@ -21,9 +21,11 @@
...
@@ -21,9 +21,11 @@
</thead>
</thead>
<tbody>
<tbody>
<tr
v-for=
"item in list"
class=
"*:h-12 *:border-b *:border-slate-300 *:pl-2 *:hover:bg-gray-300"
>
<tr
v-for=
"item in list"
class=
"*:h-12 *:border-b *:border-slate-300 *:pl-2 *:hover:bg-gray-300"
>
<td
>
{{
item
.
_id
}}
</td>
<td
class=
"w-[80px]"
>
{{
item
.
_id
}}
</td>
<td>
{{
item
.
content
}}
</td>
<td>
<td
class=
"*:py-1 *:px-4 *:rounded-md *:mr-2 *:text-gray-100"
>
<textarea
class=
"my-2 w-full bg-gray-100 max-h-48 border-gray-300"
v-model=
"item.content"
maxLength=
"512"
></textarea>
</td>
<td
class=
"*:py-1 *:px-4 *:rounded-md *:mr-2 *:text-gray-100 w-[160px]"
>
<button
@
click=
"deleteItem(item)"
class=
"bg-orange-400 hover:bg-orange-500"
>
删除
</button>
<button
@
click=
"deleteItem(item)"
class=
"bg-orange-400 hover:bg-orange-500"
>
删除
</button>
<button
@
click=
"updateItem(item)"
class=
"bg-blue-400 hover:bg-blue-500"
>
更新
</button>
<button
@
click=
"updateItem(item)"
class=
"bg-blue-400 hover:bg-blue-500"
>
更新
</button>
</td>
</td>
...
@@ -50,31 +52,48 @@ export default {
...
@@ -50,31 +52,48 @@ export default {
},
},
data
()
{
data
()
{
return
{
return
{
newContent
:
'
测试内容
'
,
newContent
:
''
,
list
:
[]
list
:
[]
}
}
},
},
methods
:
{
methods
:
{
add
()
{
add
()
{
debugger
esClient
.
add
(
this
.
newContent
)
esClient
.
add
(
this
.
newContent
).
then
(
res
=>
{
MessagePlugin
.
success
({
content
:
'
添加成功
'
,
placement
:
'
center
'
})
this
.
newContent
=
''
this
.
$nextTick
(()
=>
{
this
.
search
()
})
})
},
},
search
()
{
search
()
{
esClient
.
query
(
this
.
newContent
).
then
(
res
=>
{
esClient
.
query
(
this
.
newContent
).
then
(
res
=>
{
console
.
info
(
'
query
'
)
console
.
info
(
res
)
console
.
info
(
res
)
this
.
list
=
res
this
.
list
=
res
})
})
},
},
updateItem
(
item
)
{
updateItem
(
item
)
{
esClient
.
update
(
item
.
_id
,
item
.
content
).
then
(
res
=>
{
esClient
.
update
(
item
.
_id
,
item
.
content
).
then
(
res
=>
{
MessagePlugin
.
success
({
content
:
'
更新成功
'
,
placement
:
'
center
'
})
MessagePlugin
.
success
({
content
:
'
更新成功
'
,
placement
:
'
center
'
})
})
this
.
$nextTick
(()
=>
{
this
.
search
()
})
})
},
},
deleteItem
(
item
)
{
deleteItem
(
item
)
{
esClient
.
delete
(
item
.
_id
).
then
(
res
=>
{
esClient
.
delete
(
item
.
_id
).
then
(
res
=>
{
MessagePlugin
.
success
({
content
:
'
删除成功
'
,
placement
:
'
center
'
})
MessagePlugin
.
success
({
content
:
'
删除成功
'
,
placement
:
'
center
'
})
this
.
$nextTick
(()
=>
{
this
.
search
()
})
}).
catch
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
search
()
})
})
})
},
},
...
...
src/js/repEs.js
浏览文件 @
bb44e587
...
@@ -70,18 +70,8 @@ class RepEs {
...
@@ -70,18 +70,8 @@ class RepEs {
user_token
:
token
,
user_token
:
token
,
content
:
content
,
content
:
content
,
}).
then
(
res
=>
{
}).
then
(
res
=>
{
if
(
res
?.
status
===
200
&&
res
?.
data
?.
code
===
200
)
{
const
result
=
[]
res
?.
data
?.
data
?.
hits
.
forEach
(
element
=>
{
result
.
push
({
page_content
:
element
?.
_source
?.
content
})
});
resolve
(
result
)
}
console
.
info
(
res
)
console
.
info
(
res
)
resolve
(
res
)
}).
catch
((
err
)
=>
{
}).
catch
((
err
)
=>
{
...
@@ -101,7 +91,7 @@ class RepEs {
...
@@ -101,7 +91,7 @@ class RepEs {
axios
.
delete
(
url
).
then
(
res
=>
{
axios
.
delete
(
url
).
then
(
res
=>
{
console
.
info
(
res
)
console
.
info
(
res
)
resolve
(
res
ult
)
resolve
(
res
)
}).
catch
((
err
)
=>
{
}).
catch
((
err
)
=>
{
console
.
error
(
err
)
console
.
error
(
err
)
...
@@ -120,7 +110,7 @@ class RepEs {
...
@@ -120,7 +110,7 @@ class RepEs {
axios
.
put
(
url
,
{
content
:
content
}).
then
(
res
=>
{
axios
.
put
(
url
,
{
content
:
content
}).
then
(
res
=>
{
console
.
info
(
res
)
console
.
info
(
res
)
resolve
(
res
ult
)
resolve
(
res
)
}).
catch
((
err
)
=>
{
}).
catch
((
err
)
=>
{
console
.
error
(
err
)
console
.
error
(
err
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录