doctorgpt
1.0.0
DoctorGPT 将 GPT 引入生产环境以进行错误诊断! (尚未准备好生产......)
DoctorGPT 是一个轻量级的独立二进制文件,可以监视应用程序日志中的问题并进行诊断。
OPENAI_KEY=$YOUR_KEY doctorgpt --logfile="program.log" --configfile="config.yaml" --outdir="~/errors"
DoctorGPT 将开始跟踪program.log
(不停止)。对于每个日志行,触发诊断事件(基于正则表达式变量匹配)的用户定义解析器将使用触发的日志行和使用 OpenAI API 的所有先前日志上下文在目录~/errors
下生成诊断文件(参见下面的示例)。 config.yaml
文件用于在启动时配置程序。
--logfile (string)
要跟踪和监视的日志文件--configfile (string)
yaml 配置文件位置--outdir (string)
诊断文件目录(如果不存在则创建)--bundlingtimeoutseconds (int)
在触发行之后等待日志进入一段时间(对于多行错误转储)( default: 5
)--debug (bool)
调试日志记录( default: true
)--buffersize (int)
每个缓冲区的最大日志条目数( default: 100
)--maxtokens (int)
API 中允许的最大令牌数量( default: 8000
)--gptmodel (string)
要使用的 GPT 模型( default: "gpt-4"
)。有关模型列表,请参阅:OpenAI API 模型请参阅示例 yaml 文档:
# Prompt to be sent alongside error context to the GPT API
prompt : " You are ErrorDebuggingGPT. Your sole purpose in this world is to help software engineers by diagnosing software system errors and bugs that can occur in any type of computer system. The message following the first line containing " ERROR: " up until the end of the prompt is a computer error no more and no less. It is your job to try to diagnose and fix what went wrong. Ready? n ERROR: n $ERROR "
parsers :
# Matches line: [1217/201832.950515:ERROR:cache_util.cc(140)] Unable to move cache folder GPUCache to old_GPUCache_000
- regex : ' ^[(d{4}/d{6}.d{6}):(?P<LEVEL>w+):([w._]+)(d+)]s+(?P<MESSAGE>.*)$ '
# Conditions in which the parsed log will trigger a diagnosis
triggers :
- variable : " LEVEL "
regex : " ERROR "
# Conditions in which the parsed log will be ignored for triggers
# To create exceptions which won't trigger the GPT API
filters :
- variable : " MESSAGE "
regex : " HTTP 401 "
# Conditions in which the parsed log will be ignored and excluded from the API context
# For sensitive or spammy log entries. These will never be sent to the GPT API
excludes :
- variable : " LEVEL "
regex : " DEBUG "
# Matches line: 2022-01-27 21:37:36.776 0x2eb3 Default 511 photolibraryd: PLModelMigration.m:314 Creating sqlite error indicator file
- regex : ' ^(?P<DATE>[^ ]+)s+(?P<TIME>[^ ]+)s+[^ ]+(?P<LEVEL>[^ ]+)s+(?P<MESSAGE>.*)$ '
# When more than one trigger is present, just one trigger is sufficient to trigger a diagnosis
triggers :
- variable : " LEVEL "
regex : " Default "
- variable : " MESSAGE "
regex : " (?i)ERROR: "
# Filters and excludes were not specified
# Last parser must always be a generic one that matches any line
- regex : ' ^(?P<MESSAGE>.*)$ '
# All filters, triggers and excludes were not specified
这是文件::Users::yamilmolinar::error.log:18.diagnosed
文件的样子:
LOG LINE:
/Users/yamilmolinar/error.log:18
BASE PROMPT:
You are ErrorDebuggingGPT. Your sole purpose in this world is to help software engineers by diagnosing software system errors and bugs that can occur in any type of computer system. The message following the first line containing "ERROR:" up until the end of the prompt is a computer error no more and no less. It is your job to try to diagnose and fix what went wrong. Ready?nERROR:n$ERROR
CONTEXT:
yarn run v1.22.19
$ tsnd --respawn --transpile-only --no-notify --ignore-watch node_modules src/index.ts
[INFO] 15:20:25 ts-node-dev ver. 2.0.0 (using ts-node ver. 10.8.0, typescript ver. 4.8.4)
[INFO] DB ready
[INFO] Auth ready
[INFO] Apollo setup
[INFO] Server started at http://localhost:5555/graphql
Query: Me
POST /graphql 200 241.389 ms - 21
prisma:query SELECT 1
prisma:query SELECT "public"."User"."id", "public"."User"."email", "public"."User"."password", "public"."User"."firstName", "public"."User"."lastName", "public"."User"."avatar", "public"."User"."role", "public"."User"."bio", "public"."User"."createdAt", "public"."User"."updatedAt" FROM "public"."User" WHERE "public"."User"."email" = $2 LIMIT $2 OFFSET $3
[ERROR] PrismaClientKnownRequestError:
Invalid `prisma.user.findFirst()` invocation in
/Users/yamilmolinar/Repos/boilerplate/packages/api/src/modules/user/user.service.ts:32:36
29 }
30
31 async checkUserExists(where: UserWhereInput) {
→ 32 const user = await prisma.user.findFirst(
The table `public.User` does not exist in the current database.
at RequestHandler.handleRequestError (/Users/yamilmolinar/Repos/boilerplate/node_modules/@prisma/client/runtime/index.js:30851:13)
at RequestHandler.request (/Users/yamilmolinar/Repos/boilerplate/node_modules/@prisma/client/runtime/index.js:30834:12)
at PrismaClient._request (/Users/yamilmolinar/Repos/boilerplate/node_modules/@prisma/client/runtime/index.js:31812:16)
at UserService.checkUserExists (/Users/yamilmolinar/Repos/boilerplate/packages/api/src/modules/user/user.service.ts:32:18)
at UserService.register (/Users/yamilmolinar/Repos/boilerplate/packages/api/src/modules/user/user.service.ts:26:5)
at UserResolver.register (/Users/yamilmolinar/Repos/boilerplate/packages/api/src/modules/user/user.resolver.ts:93:18)
at dispatchHandler (/Users/yamilmolinar/Repos/boilerplate/node_modules/type-graphql/dist/resolvers/helpers.js:82:24)
at /Users/yamilmolinar/Repos/boilerplate/node_modules/type-graphql/dist/resolvers/helpers.js:83:26
at ErrorInterceptor (/Users/yamilmolinar/Repos/boilerplate/packages/api/src/lib/globalMiddleware.ts:29:12)
at dispatchHandler (/Users/yamilmolinar/Repos/boilerplate/node_modules/type-graphql/dist/resolvers/helpers.js:82:24) {
code: 'P2021',
clientVersion: '4.4.0',
meta: { table: 'public.User' }
}
Mutation: Register
POST /graphql 200 365.616 ms - 2139
DIAGNOSIS:
It seems the error is caused by a missing table in the database. The table `public.User` does not exist in the current database, and this is causing the `PrismaClientKnownRequestError` to be thrown when trying to execute `prisma.user.findFirst()` in the `UserService.checkUserExists()` function.
To resolve this issue, follow these steps:
1. Ensure that you have properly set up your database schema and that the `public.User` table is defined. If it's not, add the necessary schema definition for the User table.
2. Ensure that Prisma is properly configured to connect to your database. Double-check the configuration in your `prisma/schema.prisma` file, and make sure the database URL and other settings are correct.
3. Run a migration to update your actual database's schema. You can do this by running the following command:
npx prisma migrate dev --name init --preview-feature
This command will create the necessary tables in your database based on your Prisma schema file, apply the migration, and generate the Prisma Client.
4. After running the migration, restart your server and test your application again to ensure that the error is resolved.
If you still encounter issues, double-check your Prisma configuration, as well as your database connection settings, and ensure your code logic is correct.
config.yaml
中包含通用日志解析器库。这些解析器针对testlogs/*_2k.log
中的真实日志进行了测试。
有关测试,请参阅parsers_test.go
;有关更多日志示例,请参阅 loghub。
使用go install
:
GOBIN=/usr/local/bin go install "github.com/ingyamilmolinar/doctorgpt/agent"
Go
编译器(仅用于构建和运行测试)docker
(用于开发)k3d
(用于开发)kubectl
(用于开发)make
(用于开发) export OPENAI_API=<your-api-key>
make k4d-create
(创建 k3d 集群)make k3d-delete
(删除 k3d 集群) 注意:请参阅Makefile
了解更多命令cd agent; go test ./...; cd -
cd agent; go test -v ./...; cd -
(详细模式) 请随意提出一个问题,提出您关于如何使该程序更加有用、可移植、高效和可用于生产的建议(当然还有错误!)。
随意打开MR。如果我看到他们遵循这个项目的理念,我会对其进行审查。对于较大的工作或设计变更,请先提出问题,以便讨论策略。