From 8afa91ad48c079d293754393ab31b961bb8e575d Mon Sep 17 00:00:00 2001 From: kuhaha Date: Sat, 22 Feb 2025 17:10:03 +0800 Subject: [PATCH] feat: add auto load env (#21) * feat: add env auto load * feat: add env auto load * feat: add env auto load * feat: add env auto load * feat: add env auto load * feat: add env auto load * doc: add notice of eino_assistant * doc: add notice of eino_assistant * doc: add notice of eino_assistant * doc: add notice of eino_assistant * doc: add notice of eino_assistant --- .github/workflows/pr-check.yml | 4 ++ .github/workflows/tests.yml | 4 ++ .golangci.yaml | 5 ++- components/lambda/lambda.go | 2 + quickstart/eino_assistant/README.md | 6 ++- .../eino_assistant/cmd/einoagent/main.go | 5 +++ .../eino_assistant/cmd/einoagentcli/main.go | 4 ++ .../cmd/knowledgeindexing/main.go | 7 ++++ quickstart/eino_assistant/go.mod | 3 +- quickstart/eino_assistant/go.sum | 6 ++- quickstart/eino_assistant/pkg/env/env.go | 40 +++++++++++++++++++ 11 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 quickstart/eino_assistant/pkg/env/env.go diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index 7414939..0b881e3 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -18,6 +18,10 @@ jobs: golangci-lint: runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + repository-projects: write steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 533cd20..f7efebe 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -5,6 +5,10 @@ on: [ push, pull_request ] jobs: unit-benchmark-test: runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + repository-projects: write steps: - uses: actions/checkout@v4 - name: Set up Go diff --git a/.golangci.yaml b/.golangci.yaml index 075e061..c417f20 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,7 +1,8 @@ # output configuration options output: # Format: colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions - formats: colored-line-number + formats: + - format: colored-line-number # All available settings of specific linters. # Refer to https://golangci-lint.run/usage/linters linters-settings: @@ -31,4 +32,4 @@ issues: exclude-use-default: true exclude-files: - ".*\\.mock\\.go$" - exclude-dirs: \ No newline at end of file + exclude-dirs: [] \ No newline at end of file diff --git a/components/lambda/lambda.go b/components/lambda/lambda.go index 9a56524..e8fc5e6 100644 --- a/components/lambda/lambda.go +++ b/components/lambda/lambda.go @@ -24,6 +24,8 @@ import ( "github.com/cloudwego/eino/schema" ) +// INFO: 参考文档 https://www.cloudwego.io/zh/docs/eino/core_modules/components/lambda_guide/ + type Options struct { Filed1 string } diff --git a/quickstart/eino_assistant/README.md b/quickstart/eino_assistant/README.md index 9361bad..82e83fa 100644 --- a/quickstart/eino_assistant/README.md +++ b/quickstart/eino_assistant/README.md @@ -1,8 +1,12 @@ ## 说明 +### 文档地址 +[eino 实践教程](https://www.cloudwego.io/zh/docs/eino/overview/bytedance_eino_practice/) + ### docker 启动 redis 作为向量数据库 ```bash +# Notice: 如果本地已经安装了 redis,则需要先停止本地的 redis 容器,再执行上述命令,否则端口冲突会导致启动失败 docker-compose up -d # 可以在 http://127.0.0.1:8001 看到 redis 的 web 界面 # redis 监听在 127.0.0.1:6379, 使用 redis-cli ping 可测试 @@ -26,7 +30,7 @@ export ARK_EMBEDDING_MODEL=xxx ```bash # 为了使用 data 目录,需要在 eino_assistant 目录下执行指令 -go run cmd/einoagent/*.go +go run cmd/einoagent/main.go ``` ### 访问 diff --git a/quickstart/eino_assistant/cmd/einoagent/main.go b/quickstart/eino_assistant/cmd/einoagent/main.go index 890742e..a560331 100644 --- a/quickstart/eino_assistant/cmd/einoagent/main.go +++ b/quickstart/eino_assistant/cmd/einoagent/main.go @@ -22,6 +22,8 @@ import ( "os" "time" + "github.com/cloudwego/eino-examples/quickstart/eino_assistant/pkg/env" + "github.com/cloudwego/eino-ext/devops" "github.com/cloudwego/eino-examples/quickstart/eino_assistant/cmd/einoagent/agent" @@ -38,6 +40,9 @@ func init() { log.Printf("[eino dev] init failed, err=%v", err) } } + + // check some essential envs + env.MustHasEnvs("ARK_CHAT_MODEL", "ARK_EMBEDDING_MODEL", "ARK_API_KEY") } func main() { diff --git a/quickstart/eino_assistant/cmd/einoagentcli/main.go b/quickstart/eino_assistant/cmd/einoagentcli/main.go index bad9a9f..59ff200 100644 --- a/quickstart/eino_assistant/cmd/einoagentcli/main.go +++ b/quickstart/eino_assistant/cmd/einoagentcli/main.go @@ -30,6 +30,8 @@ import ( "strconv" "strings" + "github.com/cloudwego/eino-examples/quickstart/eino_assistant/pkg/env" + "github.com/cloudwego/eino-ext/callbacks/langfuse" "github.com/cloudwego/eino-ext/devops" "github.com/cloudwego/eino/callbacks" @@ -109,6 +111,8 @@ func main() { } func Init() error { + // check some essential envs + env.MustHasEnvs("ARK_CHAT_MODEL", "ARK_EMBEDDING_MODEL", "ARK_API_KEY") os.MkdirAll("log", 0755) var f *os.File diff --git a/quickstart/eino_assistant/cmd/knowledgeindexing/main.go b/quickstart/eino_assistant/cmd/knowledgeindexing/main.go index fb144d5..21efb9e 100644 --- a/quickstart/eino_assistant/cmd/knowledgeindexing/main.go +++ b/quickstart/eino_assistant/cmd/knowledgeindexing/main.go @@ -23,6 +23,8 @@ import ( "path/filepath" "strings" + "github.com/cloudwego/eino-examples/quickstart/eino_assistant/pkg/env" + "github.com/cloudwego/eino-ext/components/document/transformer/splitter/markdown" "github.com/cloudwego/eino/components/document" "github.com/cloudwego/eino/components/embedding" @@ -31,6 +33,11 @@ import ( "github.com/cloudwego/eino-examples/quickstart/eino_assistant/eino/knowledgeindexing" ) +func init() { + // check some essential envs + env.MustHasEnvs("ARK_API_KEY", "ARK_EMBEDDING_MODEL") +} + func main() { ctx := context.Background() diff --git a/quickstart/eino_assistant/go.mod b/quickstart/eino_assistant/go.mod index c5fd8dc..5113961 100644 --- a/quickstart/eino_assistant/go.mod +++ b/quickstart/eino_assistant/go.mod @@ -3,7 +3,7 @@ module github.com/cloudwego/eino-examples/quickstart/eino_assistant go 1.21 require ( - github.com/cloudwego/eino v0.3.7 + github.com/cloudwego/eino v0.3.9 github.com/cloudwego/eino-ext/callbacks/langfuse v0.0.0-20250117061805-cd80d1780d76 github.com/cloudwego/eino-ext/components/model/ark v0.0.0-20250117061805-cd80d1780d76 github.com/cloudwego/eino-ext/components/retriever/redis v0.0.0-20250117061805-cd80d1780d76 @@ -12,6 +12,7 @@ require ( github.com/cloudwego/hertz v0.9.5 github.com/google/uuid v1.6.0 github.com/hertz-contrib/sse v0.0.6-0.20240617114443-10a844794bf3 + github.com/joho/godotenv v1.5.1 github.com/redis/go-redis/v9 v9.7.0 ) diff --git a/quickstart/eino_assistant/go.sum b/quickstart/eino_assistant/go.sum index d0717e4..da91696 100644 --- a/quickstart/eino_assistant/go.sum +++ b/quickstart/eino_assistant/go.sum @@ -28,8 +28,8 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/eino v0.3.7 h1:PE1yFaAPVenRhDl0x6N1U2rKrfZkSr1hKlcacO6P+VA= -github.com/cloudwego/eino v0.3.7/go.mod h1:+kmJimGEcKuSI6OKhet7kBedkm1WUZS3H1QRazxgWUo= +github.com/cloudwego/eino v0.3.9 h1:pMg1uk+nLKJkpDiyJfikHNMb/pcWQWOaW7YWVuwlwQQ= +github.com/cloudwego/eino v0.3.9/go.mod h1:+kmJimGEcKuSI6OKhet7kBedkm1WUZS3H1QRazxgWUo= github.com/cloudwego/eino-ext/callbacks/langfuse v0.0.0-20250117061805-cd80d1780d76 h1:ItCp3l6FEb2UAGp8S5n7+zIVF3HRnipn5AOjtCvawkU= github.com/cloudwego/eino-ext/callbacks/langfuse v0.0.0-20250117061805-cd80d1780d76/go.mod h1:5StXiP9SugyHuqTZ1cAX5wOGnQq4hKGK+R81C74uHHM= github.com/cloudwego/eino-ext/components/document/loader/file v0.0.0-20250116071241-3f1eaaafd49c h1:FCsu5ctlFx8Frxu/LcswWk3vB/26qbYIKEKKIQOKubQ= @@ -124,6 +124,8 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/quickstart/eino_assistant/pkg/env/env.go b/quickstart/eino_assistant/pkg/env/env.go new file mode 100644 index 0000000..8dc978a --- /dev/null +++ b/quickstart/eino_assistant/pkg/env/env.go @@ -0,0 +1,40 @@ +/* + * Copyright 2025 CloudWeGo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package env + +import ( + "log" + "os" + + "github.com/joho/godotenv" +) + +func init() { + err := godotenv.Load() + if err != nil { + log.Fatalf("❌ [ERROR] Error loading .env file: %v", err) + } + +} + +func MustHasEnvs(envs ...string) { + for _, env := range envs { + if os.Getenv(env) == "" { + log.Fatalf("❌ [ERROR] env [%s] is required, but is not set now, please check your .env file", env) + } + } +}