@@ -26,13 +26,10 @@ import { Messages } from './assistant/Messages'
2626import { funcs } from './assistant/funcs'
2727
2828const GREETTING =
29- '你好, 我是 PsychPen 的 AI 助手, 可以帮你讲解 PsychPen 的使用方法、探索你的数据集、导出数据、跳转页面、变量标准化/中心化/离散化、生成新变量、筛选数据等 . 请问有什么可以帮你的?'
29+ '你好, 我是 PsychPen 的 AI 助手, 可以帮你讲解 PsychPen 的使用方法、探索你的数据集、导出数据、跳转页面、变量标准化/中心化/离散化、生成新变量、筛选数据、解释你当前的统计结果等 . 请问有什么可以帮你的?'
3030const INSTRUCTION =
3131 '你是在线统计分析和数据可视化软件"PsychPen"中的AI助手. \n\n你将收到用户的提问、当前用户导入到软件中的数据集中的变量的信息、PsychPen的使用和开发文档、可以供你调用的工具 (函数) 信息. \n\n你的任务是按照用户的要求, 对用户进行回复, 或调用工具 (函数). 在调用工具 (函数) 前, 请确保你已经明确知晓了用户的意图, 否则请通过进一步和用户对话来确认细节. \n\n你的回复中如果包含数学公式和符号, 请使用 TeX 语法, 并将行内公式用 `$` 包裹 (类似于 Markdown 的行内代码), 将块级公式用 `$$` 包裹 (类似于 Markdown 的代码块).'
32- function GET_PROMPT (
33- vars : Variable [ ] ,
34- page : string ,
35- ) : string {
32+ function GET_PROMPT ( vars : Variable [ ] , page : string , stat : string ) : string {
3633 const varsInfo = vars . map ( ( col ) => {
3734 if ( col . type === '称名或等级数据' ) {
3835 return `| ${ col . name } | ${ col . type } | ${ col . valid } | ${ col . missing } | ${ col . unique } | - | - | - | - | - | - |`
@@ -50,7 +47,7 @@ function GET_PROMPT(
5047 : '未定义任何子变量'
5148 return `| ${ col . name } | ${ col . type } | ${ col . valid } | ${ col . missing } | ${ col . unique } | ${ col . mean ?. toFixed ( 4 ) || '-' } | ${ col . std ?. toFixed ( 4 ) || '-' } | ${ col . q2 ?. toFixed ( 4 ) || '-' } | ${ col . min ?. toFixed ( 4 ) || '-' } | ${ col . max ?. toFixed ( 4 ) || '-' } | ${ subVarInfo } |`
5249 } )
53- const userText = `\n\n# 用户信息\n\n用户当前所处的页面为: ${ page } `
50+ const userText = `\n\n# 用户信息\n\n用户当前所处的页面为: ${ page } ${ stat && `, 当前统计结果为: \n\n\`\`\`markdown\n ${ stat } \n\`\`\`` } `
5451 const varsText = `\n\n# 变量信息\n\n| 变量名 | 变量类型 | 有效值数量 | 缺失值数量 | 唯一值数量 | 均值 | 标准差 | 中位数 | 最小值 | 最大值 | 子变量信息 |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n${ varsInfo . join ( '\n' ) } `
5552 const docsText = `\n\n# 使用文档\n\n\`\`\`markdown\n${ readme } \n\`\`\``
5653 return INSTRUCTION + userText + varsText + docsText
@@ -71,8 +68,17 @@ export function AI() {
7168 const data = useData ( ( state ) => state . data )
7269 const dataCols = useData ( ( state ) => state . dataCols )
7370 const messageApi = useStates ( ( state ) => state . messageApi )
71+ const statResult = useStates ( ( state ) => state . statResult )
7472 const disabled = useStates ( ( state ) => state . disabled )
75- const nav = useNav ( )
73+ const activeMainPage = useNav ( ( state ) => state . activeMainPage )
74+ const currentPageInfo = useNav ( ( state ) => state . currentPageInfo )
75+ const setMainPage = useNav ( ( state ) => state . setMainPage )
76+ const setStatisticsViewSubPage = useNav (
77+ ( state ) => state . setStatisticsViewSubPage ,
78+ )
79+ const setVariableViewSubPage = useNav ( ( state ) => state . setVariableViewSubPage )
80+ const setPlotsViewSubPage = useNav ( ( state ) => state . setPlotsViewSubPage )
81+ const setToolsViewSubPage = useNav ( ( state ) => state . setToolsViewSubPage )
7682 const [ input , setInput ] = useState ( '' )
7783 const [ loading , setLoading ] = useState ( false )
7884 const [ showLoading , setShowLoading ] = useState ( false )
@@ -100,7 +106,14 @@ export function AI() {
100106 setMessages ( [ ...old , user ] )
101107 setInput ( '' )
102108 } )
103- const system = GET_PROMPT ( dataCols , nav . currentPageInfo ( ) )
109+ const system = GET_PROMPT (
110+ dataCols ,
111+ currentPageInfo ( ) ,
112+ statResult ||
113+ ( activeMainPage === MAIN_PAGES_LABELS . STATISTICS
114+ ? '(还未进行统计分析)'
115+ : '' ) ,
116+ )
104117
105118 const stream = await ai . chat . completions . create ( {
106119 model : model ,
@@ -239,7 +252,7 @@ export function AI() {
239252 break
240253 }
241254 case 'nav_to_data_view' : {
242- nav . setMainPage ( MAIN_PAGES_LABELS . DATA )
255+ setMainPage ( MAIN_PAGES_LABELS . DATA )
243256 newMessages [ 1 ] . content = '已成功跳转到数据视图'
244257 break
245258 }
@@ -251,8 +264,8 @@ export function AI() {
251264 ) {
252265 throw new Error ( `未知的子页面 (${ page } )` )
253266 }
254- nav . setMainPage ( MAIN_PAGES_LABELS . VARIABLE )
255- nav . setVariableViewSubPage ( page )
267+ setMainPage ( MAIN_PAGES_LABELS . VARIABLE )
268+ setVariableViewSubPage ( page )
256269 newMessages [ 1 ] . content = `已成功跳转到变量视图的${ page } 页面`
257270 break
258271 }
@@ -264,8 +277,8 @@ export function AI() {
264277 ) {
265278 throw new Error ( `未知的子页面 (${ page } )` )
266279 }
267- nav . setMainPage ( MAIN_PAGES_LABELS . PLOTS )
268- nav . setPlotsViewSubPage ( page )
280+ setMainPage ( MAIN_PAGES_LABELS . PLOTS )
281+ setPlotsViewSubPage ( page )
269282 newMessages [ 1 ] . content = `已成功跳转到绘图视图的${ page } 页面`
270283 break
271284 }
@@ -277,8 +290,8 @@ export function AI() {
277290 ) {
278291 throw new Error ( `未知的子页面 (${ page } )` )
279292 }
280- nav . setMainPage ( MAIN_PAGES_LABELS . STATISTICS )
281- nav . setStatisticsViewSubPage ( page )
293+ setMainPage ( MAIN_PAGES_LABELS . STATISTICS )
294+ setStatisticsViewSubPage ( page )
282295 newMessages [ 1 ] . content = `已成功跳转到统计视图的${ page } 页面`
283296 break
284297 }
@@ -290,8 +303,8 @@ export function AI() {
290303 ) {
291304 throw new Error ( `未知的子页面 (${ page } )` )
292305 }
293- nav . setMainPage ( MAIN_PAGES_LABELS . TOOLS )
294- nav . setToolsViewSubPage ( page )
306+ setMainPage ( MAIN_PAGES_LABELS . TOOLS )
307+ setToolsViewSubPage ( page )
295308 newMessages [ 1 ] . content = `已成功跳转到工具视图的${ page } 页面`
296309 break
297310 }
0 commit comments