Skip to content

Commit 9a71cd6

Browse files
committed
fix: 增加提示词
1 parent 82d5f2b commit 9a71cd6

File tree

3 files changed

+159
-15
lines changed

3 files changed

+159
-15
lines changed

package-lock.json

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/apiTools.ts

Lines changed: 155 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import * as mysql from 'mysql2/promise';
1414
import * as childProcess from 'child_process';
1515
import { exec } from 'child_process';
1616
import { promisify } from 'util';
17-
import { ragService, CONFIG as RAG_CONFIG } from './ragService';
17+
import { CONFIG as RAG_CONFIG } from './ragService';
1818
import { parseString } from 'xml2js';
1919

2020

@@ -290,7 +290,23 @@ async function fetchPageContent(url: string): Promise<string> {
290290
// 1. 搜索网络
291291
export const searchTool: Tool = {
292292
name: 'web_search',
293-
description: '执行网络搜索并返回前5个结果的摘要,用户提供这个工具一般是不信任你自己的判断,先上网搜索总结后再下结论。',
293+
description: `执行网络搜索并返回前5个结果的摘要。适用于需要获取外部信息、验证数据或了解最新动态的情况。
294+
用户提供这个工具通常是对你的知识储备或判断持怀疑态度,希望通过网络搜索获取更权威或更新的信息。
295+
你可以用它来补充自己的回答,确保回答准确且有据可依。
296+
当问到你依稀技术名词的时候,你没有把握就不要乱说,先联网搜索。因为大模型很容易产生幻觉,以为自己什么都懂。
297+
298+
使用场景:
299+
- 获取最新信息: 例如,用户询问“2023年最好的编程语言是什么?”
300+
- 验证事实: 例如,确认“Python的最新版本是什么?”
301+
- 收集多种观点: 例如,了解“AI在医疗领域的应用有哪些?”
302+
303+
具体示例:
304+
用户问:“最新的AI编程工具是什么?”
305+
你可以使用 web_search,输入参数 query: "latest AI programming tools 2023",然后回答:
306+
“根据网络搜索结果,当前流行的AI编程工具包括:1. GitHub Copilot(代码自动补全),2. Tabnine(多语言支持),...”。
307+
308+
如何使用:
309+
- 参数 query: 输入搜索关键词,支持英文双引号精确匹配。例如 "AI tools site:github.com" 会限定搜索范围到 GitHub。`,
294310
parameters: {
295311
type: 'object',
296312
properties: {
@@ -328,7 +344,21 @@ registerTool(searchTool);
328344
// 2. 获取当前日期时间
329345
export const getCurrentDateTime: Tool = {
330346
name: 'get_current_datetime',
331-
description: '获取当前的日期和时间。',
347+
description: `获取当前的日期和时间。适用于任何需要实时时间信息的情况。
348+
它简单高效,没有参数,直接返回本地时间。可以用它来回答时间相关的问题,或在任务中提供时间上下文。
349+
350+
使用场景:
351+
- 回答时间问题: 例如,用户直接问“现在几点了?”或“今天是星期几?”
352+
- 任务安排: 例如,用户说“请在明天上午10点提醒我开会”,你可以用它确认当前时间并计算提醒时间。
353+
- 记录时间戳: 例如,在日志或事件记录中添加当前时间。
354+
355+
具体示例:
356+
用户问:“现在是几点?”
357+
你调用 get_current_datetime,返回:
358+
“当前时间是 2023年10月15日 14:30(本地时间)。”
359+
360+
如何使用:
361+
- 无参数,直接调用即可,返回格式为本地时间的字符串。`,
332362
parameters: {
333363
type: 'object',
334364
properties: {},
@@ -344,7 +374,24 @@ registerTool(getCurrentDateTime);
344374
// 3. 读取指定路径文本
345375
export const readTextFile: Tool = {
346376
name: 'read_text_file',
347-
description: '读取指定路径的文本文件内容。',
377+
description: `读取指定路径的文本文件内容。适用于需要访问本地文件信息的情况。
378+
它可以帮助你提取文件中的数据、配置或日志,适合处理静态文本内容。
379+
比如我让你解析一个代码里的内容,找出里面的某个引用函数,你就可以用这个工具加载文件文本内容然后再进行分析。
380+
有些时候我会让你解释代码。或者问你代码里的某一段内容的意思,或者查找相关代码,你就应该重新加载最可能的那个代码文件,然后重新回答我的问题。
381+
我让你解释代码的时候你一定要用这个工具去读取,而不是凭文件名猜测他的内容,切记!
382+
383+
使用场景:
384+
- 读取文件内容: 例如,用户说“请告诉我 C:\\notes.txt 里写了什么”。
385+
- 处理配置: 例如,在调试时读取配置文件“读取 config.txt 的设置”。
386+
- 分析日志: 例如,查看日志文件中的错误信息“读取 error.log 的最后一行”。
387+
388+
具体示例:
389+
用户说:“请读取 C:\\data.py 的内容。”
390+
你调用 read_text_file,参数 filePath: "C:\\data.tpy",返回:
391+
“文件内容是:'这是一个测试文件,包含重要信息。'”
392+
393+
如何使用:
394+
- 参数 filePath: 输入完整的文件路径(如 "C:\\data.py"),支持 UTF-8 编码的文本文件。`,
348395
parameters: {
349396
type: 'object',
350397
properties: {
@@ -369,7 +416,17 @@ registerTool(readTextFile);
369416
// 4. 连接 MySQL 查表
370417
export const queryMySQL: Tool = {
371418
name: 'query_mysql',
372-
description: '连接 MySQL 数据库并执行查询。',
419+
description: `连接 MySQL 数据库并执行 SQL 查询,返回 JSON 格式结果。适合数据查询或管理。
420+
421+
使用场景:
422+
423+
数据查询:用户问“用户表里有多少人?”
424+
生成报告:统计“所有订单的总金额”。
425+
数据管理:更新“用户 ID 为 1 的状态”。
426+
具体示例:
427+
用户说:“查询用户表中的所有用户。”
428+
调用 query_mysql,参数:host: "localhost", user: "root", password: "123456", database: "mydb", query: "SELECT * FROM users",返回:
429+
“结果:[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]`,
373430
parameters: {
374431
type: 'object',
375432
properties: {
@@ -413,14 +470,24 @@ type SVNError = Error & { stderr?: string };
413470
const execAsync = promisify(exec);
414471
export const getSVNLog: Tool = {
415472
name: 'get_svn_log',
416-
description: '获取SVN日志,支持多种查询条件',
473+
description: `获取 SVN 仓库的提交日志,支持筛选路径、作者或时间范围,适合版本管理。
474+
475+
使用场景:
476+
477+
查看历史:用户问“SVN 仓库最近5次提交是什么?”
478+
代码审查:查找“Alice 的所有提交”。
479+
项目跟踪:查看“过去一周的提交”。
480+
具体示例:
481+
用户说:“获取 SVN 仓库最近10条提交记录。”
482+
调用 get_svn_log,参数 path: "http://svn.example.com/repo", limit: 10,返回:
483+
“结果:[{'revision': '100', 'author': 'Alice', 'date': '2023-10-01', 'message': '修复bug'}]`,
417484
parameters: {
418485
type: 'object',
419486
properties: {
420487
path: {
421488
type: 'string',
422489
description: `仓库路径,支持以下格式:
423-
- 本地工作副本路径:'/projects/myapp'
490+
- 本地工作副本路径:'k:\\projects\\myapp'
424491
- 仓库URL:'http://svn.example.com/repo'
425492
- 仓库子目录:'http://svn.example.com/repo/trunk/src'`
426493
},
@@ -565,7 +632,19 @@ registerTool(getSVNLog);
565632
// 6. 比对 SVN 本地差异的 diff
566633
export const getSVNDiff: Tool = {
567634
name: 'get_svn_diff',
568-
description: '获取 SVN 仓库的本地差异。',
635+
description: `显示 SVN 本地工作副本与远程仓库的差异,适合提交前检查。
636+
637+
使用场景:
638+
639+
检查改动:用户问“我对 SVN 做了什么改动?”
640+
提交审查:确认“本地差异”。
641+
调试:对比本地和远程代码。
642+
具体示例:
643+
用户说:“显示 SVN 仓库的本地差异。”
644+
调用 get_svn_diff,参数 repoPath: "C:\\svn_repo",返回:
645+
“差异:'+ 新增一行\n- 删除一行'”
646+
参数说明:
647+
repoPath: 本地仓库路径`,
569648
parameters: {
570649
type: 'object',
571650
properties: {
@@ -588,7 +667,17 @@ registerTool(getSVNDiff);
588667
// 7. 比对 GitHub 本地差异的 diff
589668
export const getGitDiff: Tool = {
590669
name: 'get_git_diff',
591-
description: '获取 Git 仓库的本地差异。',
670+
description: `显示 Git 本地工作目录与已提交内容的差异,适合代码审查或调试。
671+
672+
使用场景:
673+
674+
检查更改:用户问“Git 仓库的本地改动是什么?”
675+
提交确认:查看“Git diff”。
676+
错误排查:对比改动。
677+
具体示例:
678+
用户说:“显示 Git 仓库的本地差异。”
679+
调用 get_git_diff,参数 repoPath: "C:\\git_repo",返回:
680+
“差异:'+ 添加新功能\n- 删除旧代码'`,
592681
parameters: {
593682
type: 'object',
594683
properties: {
@@ -611,7 +700,17 @@ registerTool(getGitDiff);
611700
// 8. Grep 搜索指定目录文本
612701
export const grepSearch: Tool = {
613702
name: 'grep_search',
614-
description: '在指定目录中搜索文本。',
703+
description: `在指定目录中搜索包含特定文本的文件,适合日志分析或代码搜索。
704+
705+
使用场景:
706+
707+
搜索关键词:用户说“在 C:\\logs 里找 'error'”。
708+
代码审查:查找“userId”的使用。
709+
日志分析:定位“timeout”。
710+
具体示例:
711+
用户说:“在 C:\\projects 里搜索 'error'。”
712+
调用 grep_search,参数 directory: "C:\\projects", pattern: "error",返回:
713+
“结果:C:\\projects\\log.txt, C:\\projects\\test.py`,
615714
parameters: {
616715
type: 'object',
617716
properties: {
@@ -635,7 +734,17 @@ registerTool(grepSearch);
635734
// 9. 在路径下递归搜索文件
636735
export const findFiles: Tool = {
637736
name: 'find_files',
638-
description: '在指定路径下递归搜索文件,支持文件名或正则表达式匹配。',
737+
description: `递归搜索指定路径下的文件,支持文件名或正则表达式,适合文件管理。
738+
739+
使用场景:
740+
741+
查找文件:用户说“找 C:\projects 里的 config.json”。
742+
批量搜索:列出“.py 文件”。
743+
项目管理:搜索“test 开头的文件”。
744+
具体示例:
745+
用户说:“找 C:\projects 里所有的 .py 文件。”
746+
调用 find_files,参数 directory: "C:\projects", pattern: ".+\.py", useRegex: true,返回:
747+
“结果:C:\projects\main.py, C:\projects\test.py”`,
639748
parameters: {
640749
type: 'object',
641750
properties: {
@@ -705,7 +814,25 @@ registerTool(findFiles);
705814
// 修改后的writeMemory工具(移除本地嵌入生成和存储)
706815
export const writeMemory: Tool = {
707816
name: 'write_memory',
708-
description: 'Save knowledge or insights to memory.',
817+
description: `将重要信息或见解保存到记忆中,供将来检索。
818+
它适合记录对话中的关键点或学习成果,类似于一个知识库。
819+
一些我要求你记住的东西,或者是联网搜索到的知识,你自己总结出来的感悟。你都可以总结起来存入本地记忆。
820+
一些我们一起讨论得出的结论你也可以存起来。你要做个虚心好学的学生,学到的东西都要做好笔记。
821+
如果一个任务你做了好几个步骤才完成,可以总结一下,写明任务目标,注意事项,一些积累经验,快速执行的方法,存入记忆,下次类似任务可以根据这个经验快速处理。
822+
823+
使用场景:
824+
- 记录新信息: 例如,用户说“我发现了一个新工具叫 X”,你可以保存它。
825+
- 学习过程: 例如,保存一个技巧“Python 的 lambda 函数用法”。
826+
- 任务跟踪: 例如,记录项目更新“项目 A 的截止日期是明天”。
827+
828+
具体示例:
829+
用户说:“我发现了一个新工具叫 CodeAI。”
830+
你调用 write_memory,参数 content: "新工具:CodeAI",
831+
返回:
832+
“记忆已保存:新工具:CodeAI。”
833+
834+
如何使用:
835+
- 参数 content: 输入要保存的内容。`,
709836
parameters: {
710837
type: 'object',
711838
properties: {
@@ -740,7 +867,22 @@ export const writeMemory: Tool = {
740867
// 修改后的readMemory工具(移除本地相似度计算)
741868
export const readMemory: Tool = {
742869
name: 'read_memory',
743-
description: 'Retrieve relevant knowledge from memory.',
870+
description: `从记忆中检索信息,适合回顾保存的内容。
871+
有时候我要你回忆一下,就是要你从这里调取记忆。我们以前进行的对话,我纠正过你的记忆,或者你自己总结的感悟都会在本地记忆里。
872+
你要勤于调取本地记忆,看看是否有和当前任务相关的记忆,帮助你更好的执行任务。
873+
有一些复杂任务你可以预先调取记忆,看以前有没有遇到过类似任务,有没有总结过的经验可以参考,从而高效的完成。
874+
875+
使用场景:
876+
877+
回忆信息:用户问“之前提到的工具是什么?”
878+
引用知识:使用保存的内容。
879+
任务回顾:查看“截止日期”。
880+
具体示例:
881+
用户说:“之前提到的工具是什么?”
882+
调用 read_memory,参数 query: "工具",返回:
883+
“结果:新工具:CodeAI”
884+
参数说明:
885+
query: 搜索关键词。`,
744886
parameters: {
745887
type: 'object',
746888
properties: {

src/chatPanel.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,10 @@ export class ChatPanel {
268268
每次只调用一个工具,然后结束输出等返回。然后再调用下一个工具。
269269
你要先理解任务,搞清楚哪些信息你是不知道的, 用记忆结构查询记忆,如果能查到就采用,
270270
然后指定任务计划,规划好分几个步骤,用tool去逐步去推进。
271-
等你觉得信息获得足够了再开始决策和输出结论。` + normalSystemPrompt
271+
等你觉得信息获得足够了再开始决策和输出结论。
272+
每次任务开始,你要先调取老记忆,看看以前有没有执行过类似任务,吸取经验。
273+
每次对话结束,如果获得了新的知识或者有感悟,或者我纠正了你某些内容,你可以用工具存储这些记忆。
274+
` + normalSystemPrompt
272275
: normalSystemPrompt;
273276

274277
return await callDeepSeekApi(

0 commit comments

Comments
 (0)