|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。8 q% ^. k) O& b( D
" t0 v/ ]1 l& V! a, ^! E5 P! m* s我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
% f# C1 e4 s* ~( a7 \* K/ j. W3 |# Y1 Q8 l9 y; A$ h+ t
---) d2 k( M7 E9 v6 c" f1 Z
' M/ f0 k5 O8 O& B* m### **1. 环境准备**0 d3 J9 m, o/ ?; P
#### 1.1 服务器要求( d' m6 A9 U5 U1 t7 {/ s: I7 a; R
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
7 V; Z# Z. H7 h* w- **Node.js**:安装 Node.js v16.x 或更高版本。
! g' R* W; E" R4 U% n9 A$ D- **数据库**:PostgreSQL(推荐)或 MySQL。
6 M5 z7 ?9 m; j# ~: W- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。5 I% o7 |7 g* ~% Q0 i
% \) @& T0 r0 O
#### 1.2 安装依赖
( H$ M* E5 u" J1 U3 \5 I- 安装 Node.js 和 npm:
2 o6 a) K6 U2 j7 D3 ^6 v ```bash7 \7 u* d% m0 N; p; x
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -2 O9 [; V* g3 O, f; o5 x8 `9 K
sudo apt-get install -y nodejs
, z1 B |, y6 X4 c0 h- H- j* _ ``` ~* p; b3 ^0 Z: ^+ Q
- 安装 PostgreSQL:, @1 D0 D+ a0 e7 E1 }. U$ K
```bash- N* t. I- Q. }8 q. ~" s
sudo apt-get install postgresql postgresql-contrib& B& U0 d7 J% q4 b1 u6 N: S% \. ?
sudo systemctl start postgresql
' ^& q g' u3 M sudo systemctl enable postgresql
0 B* K. s/ k# B9 o4 C" l% | ```
% |+ p" A: s9 ?% }- `6 G; A. U5 A. x9 p- M+ W
---3 ]& C$ F; E8 J ` S1 w7 U
9 M& ?, y* O3 q5 ?: [- Y+ {
### **2. 安装 NocoBase**( ]5 Y1 B1 N- P; f4 K" m0 T$ b- c
#### 2.1 下载 NocoBase7 |, w3 b0 I- J7 y5 d: b1 M. X8 O" s+ J, Y
- 从 GitHub 克隆 NocoBase 仓库:# h! K4 l0 t' ?5 i. y1 `
```bash; H+ {1 Q( L! l) @2 d( N1 ~
git clone https://github.com/nocobase/nocobase.git
8 ]' D- N3 B7 m& x4 p% R7 W5 A5 Z cd nocobase/ a/ h& G5 |$ Y; U7 n2 G; ]
```5 f3 L. l7 g: J2 D" g; M$ `
{, j* r" j' N* M9 V; z: g
#### 2.2 安装依赖
. E" {/ G, ?5 |- 安装项目依赖:
. x# g( h2 r* o3 w ```bash) {( ?2 A4 I7 c
npm install1 l$ M( I* B7 M( Q1 @' s% Z
```
( t5 ]: W6 v$ h. m) X! S
0 w* e# k+ I& t% t#### 2.3 配置数据库& n' `: K& K. F+ Z: m: X7 |& ~7 |, r& I
- 创建 PostgreSQL 数据库:! a0 d! K" }& K+ y5 K
```bash
& E" E8 M! ?) m, ? Q sudo -u postgres psql5 n; S+ m9 Z. G7 r' k# f
CREATE DATABASE nocobase;1 i8 ?8 W0 B4 Z; h) {
CREATE USER nocobase_user WITH PASSWORD 'your_password';& W3 @% n+ K y
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;: x/ C7 d# g7 a
\q
3 J: }3 w0 n9 F2 s: K/ J* g ```1 A0 x2 V# | e: j8 y* I5 ^; O; R
- 修改 NocoBase 配置文件:
. n- B! y) `: ]# I9 |) V# |! l 编辑 `config/config.json`,配置数据库连接信息:
, ~5 o# l# j. _4 a9 @) [' z ```json
+ Z" d- e+ F* ~0 T! ~- a {
1 b1 f* U% V3 l: I% n) n "database": {5 I) d# J5 v, U9 t- E3 r, U+ ^
"dialect": "postgres",$ O- ], ]3 y' r: g
"host": "localhost",' z: g' x9 ^# g1 y8 ~# P% M/ _
"port": 5432,
1 b+ q) G* d, b4 [* j- G; n; n "username": "nocobase_user",
, B/ O: @2 ~* C; `( @1 g" k "password": "your_password",4 Z& l; ]0 s1 N8 J, f; _
"database": "nocobase"
; u* P2 x5 ?) H }
6 m0 B4 o9 m. S7 e/ n1 u. `: o }: g+ r$ h8 k! y
```) u" ]7 C- U+ Y8 Q' V; _
) ~- Y% J0 x+ }1 c" S. |
#### 2.4 初始化数据库
% D( ?9 R3 K* x' ^' v+ h d- 运行数据库迁移脚本:
* _& |( ~2 E( ~. l8 A ```bash
! P5 Z* y" Q" X6 K( B( ]! [+ t npm run db:migrate. {* Q) \( K7 Z/ |, Z" G; X
```9 ~4 F( n( k- G/ i; z
2 `7 Y% S% Q7 F7 S. n- H% b2 X
#### 2.5 启动 NocoBase" }4 H) P! N/ b. ]( K7 D0 r
- 启动开发服务器:: `7 o1 G# e. @: E6 X8 i
```bash& W; y {$ V$ E" ]0 g( K
npm run start
, F ? c9 c4 [& h9 r ```% l G: P& u5 y. L$ p5 @8 |
- 访问 NocoBase:
/ o) _$ A% |. L7 U& k0 ]; M 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
8 n% _! z l2 w* Q) h5 ]8 p0 b# C; A( K {/ W$ X
---
7 W \- O5 r4 r4 G8 Y
$ O' F2 r, L0 A1 u### **3. 集成 DeepSeek*** U) v) U* \6 x% S Q
#### 3.1 创建 NocoBase 插件
# g+ q* q5 ]: Z. g- t) c* E- 使用 NocoBase CLI 创建插件:3 M4 g5 K# @! g/ R' O+ V3 {2 V1 J( f
```bash1 z: o& U3 y: \8 G9 w* ?7 J
npm run cli plugin:create deepseek-integration/ U! A/ n( O9 Z: ?: q
cd plugins/deepseek-integration
8 e- j8 @; w" N ```+ ^/ V' V8 o% v+ x' L( l' x
) u& V3 a+ H/ n$ F
#### 3.2 安装 DeepSeek SDK
4 }6 A- g, P2 H( q. V0 C- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):1 G0 S! H E. p
```bash( {6 ~$ A0 v* |$ `. ]
npm install deepseek-sdk. j5 h4 R4 j9 Z, p" {
```
9 N5 R; u, N) f/ B4 c
. l9 m2 b, H3 V5 |#### 3.3 配置 DeepSeek API 密钥0 @/ @( y0 ]4 y$ ~% a; k0 x
- 在插件配置文件中添加 DeepSeek API 密钥:# u7 o/ V2 E' E
编辑 `plugins/deepseek-integration/config/config.json`:/ o8 l% a+ x- ~
```json
1 f: b; t2 b0 J- x% u2 S& X0 {! z6 Q {- q! Y# r2 r* K9 |3 H( o) h) G
"deepseek": {8 Y+ ^6 d$ g, @) ~$ Q4 }2 ^; h
"apiKey": "your_deepseek_api_key"0 K' X1 i! v) i% L8 w) O% ?# i
}( K3 ^. Y9 u. d; @/ F5 d+ W5 I
}
; [$ I- S; u$ b9 U* A/ Y9 | ```
5 B3 e K& C; f5 \( M) L$ b$ u3 J+ [5 O4 @; G8 C, z# S1 B2 {
#### 3.4 实现 DeepSeek 服务
) k) e$ X4 J( L$ t1 A- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
+ C f) Q1 M) y0 [) K6 B2 l" K; b ```javascript6 r1 u e: B0 s4 r' [6 i
const DeepSeek = require('deepseek-sdk');* y$ A7 L8 P! Y2 e
! U. @: ~5 r" Y6 B
class DeepSeekService {
4 H: ~) t: n) \0 S4 Y constructor(apiKey) {2 |3 f$ z3 X& m9 i
this.deepseek = new DeepSeek(apiKey);1 n0 {+ L( Z8 N1 d+ g: I
}) C: \* \8 n0 W9 R, N( \& @* F
8 G. x/ |, F( l1 o. z
async query(prompt) {
) c; @; y% K* { const response = await this.deepseek.complete({# q$ k. R/ J3 T) @! z8 P
prompt: prompt,4 M* `7 s+ o: N% z! q
max_tokens: 150! Z* T$ v: c; f8 {
});
" N U1 j+ x& e6 F4 l: s& C return response.choices[0].text.trim();
8 N! H7 j/ `& e }
1 q0 ]& ^) H o9 J }
# y9 U8 f: {# F% a, y( w# y6 p4 ~: `& F2 ~
module.exports = DeepSeekService;+ p# ~) C1 ~7 y) A2 l
```- n* _# y+ q, {, \; }/ Y/ D
+ R- L7 Y- ~% C4 N& c
#### 3.5 创建 API 路由9 K& ~1 S9 R8 B5 N4 s
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
. h# b" i: S, x1 |$ S ```javascript
6 d4 y) H, w7 K6 c/ d- ]8 w const express = require('express');
$ n9 {" \/ F9 y! p6 t# v! Q const DeepSeekService = require('../services/deepseekService');6 O7 V' U/ b/ q4 v, T$ [& L7 T
const router = express.Router();
4 l8 l7 y/ z# X6 V6 n- } const config = require('config');2 j8 E2 t) h# G# Z
* t/ V/ H# l, r8 @! d
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
8 D* r3 ?6 n4 L8 e$ V
$ n6 q7 ^0 Y0 T5 y" n' z router.post('/query', async (req, res) => {, _1 L9 h4 }1 J0 O# P- i2 N
const { prompt } = req.body;. n( Y* d/ K4 a4 e5 E
try {
{7 L- l: _$ F: O% y& V' m( B const result = await deepseekService.query(prompt);
! v- F6 G( y+ B( ]; ^3 G8 \ res.json({ success: true, result });4 A9 F* A& i# J8 Y. o' A
} catch (error) {
j+ x5 z; h: V res.status(500).json({ success: false, error: error.message });
6 X( a, R& d, U) K5 G }
7 m3 b, ]+ ~4 A% e5 H3 b });
. \6 v' X' J# H" H; j4 Q F$ y5 u; ]9 J G8 N( v' Y/ q
module.exports = router;% U( d; l. T/ a" ~# K7 p; O+ V
```6 [4 C9 }6 m3 o$ i- e+ }/ U# b, i5 h
3 W* m9 J8 w! a; G0 }; M#### 3.6 注册插件0 {! s5 @2 u* U! o' O1 \% u
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
, J: t8 p& s& O! B) s ```javascript' \+ m: c- x1 y
const deepseekRoutes = require('./routes/deepseekRoutes');: a( w" h, s% Z, ~
9 h; ~1 L6 {: `3 ?& n" Q ~ module.exports = function(app) {
1 s" M1 z5 O( s* \! j app.use('/api/deepseek', deepseekRoutes);) r8 ]* }- o3 w( r& F1 i
};4 j; W; k7 E+ e3 w! b5 f
```
; D' c& A7 M2 U
1 M% y. B1 g9 u1 A---0 {3 f6 y" ?) _, u I+ r# M- r
+ N$ i1 }! F3 H( g, k
### **4. 测试集成**
# v0 l& i- k! ]# c( Q7 b0 Z. f, P#### 4.1 启动 NocoBase
! \0 ~$ k; S) n9 @4 V- x0 l- 启动 NocoBase:( b/ P- Q/ f, P2 M* |, `) Y
```bash
: S& {4 t3 C, O npm run start" @" T8 R* a: M6 j& d; i
```9 x6 V) B3 _+ x' }5 p" U$ y+ d
% I$ W9 A; G q5 L
#### 4.2 测试 DeepSeek API4 g6 l9 v. Y2 l- v
- 使用 `curl` 或 Postman 测试 API:
( f& w2 c4 D# Z; d6 h$ a. u ```bash# D$ v# ^4 @! {( q/ w# ^
curl -X POST http://localhost:3000/api/deepseek/query \7 h4 D% K( I; \1 F- @: Y2 i3 u
-H "Content-Type: application/json" \
5 k1 y. J( b0 M2 P! ?% d -d '{"prompt": "显示最近三个月联系过的客户"}'1 ~, J! c: c; q: F* I' m8 b+ B& R3 L
```- J+ i0 | U; u/ x; z# D i
! a+ s2 T* [; f---
( h) h4 t. N- A c5 M5 `0 W$ m; B( O' A4 y
### **5. 部署到生产环境**+ n8 R* M. L1 J* i9 F6 q) X0 z
#### 5.1 使用 Docker 部署: n$ x; T, T4 z! r8 `: @" p
- 创建 `docker-compose.yml` 文件:8 c# I5 D" B% Q
```yaml
/ [' U: X/ r, [* @* W version: '3'4 Q. ?5 r3 G. v1 l/ B% l
services:
6 n3 B4 B6 j, l5 f) j' @ app:
2 S3 u1 V3 l6 s% }9 D, c2 I, R3 d/ i image: node:168 |3 {5 p$ |7 }2 A$ ]3 ^- _
container_name: nocobase7 z3 u- y& Q" }# T
working_dir: /app
' O: K, v/ ?. l& j+ k% p. ` volumes:
0 Y/ z1 J3 D) r: Y' n) M ?# @ - .:/app0 ]( Y4 a, M$ f/ g( a$ E
ports:+ G/ M. `* d. N! K
- "3000:3000"
% u, L j/ G0 x4 t environment:
& j1 }* r* n& C) ~. p. H1 o- q3 ` - NODE_ENV=production) ?! T$ l# R6 e; u \1 r
command: npm run start* n2 k$ m1 [; o* w1 ]" c4 q+ }
db:
9 I1 y; y' Z' p4 ~ image: postgres:13. v6 i, {% y4 X) J
container_name: nocobase_db; x! W1 F3 d2 ~( \
environment:" y* t' L+ f: z0 t: d# p. j) a8 \
POSTGRES_USER: nocobase_user/ a7 x; ?* a, Y8 P/ x9 v* x9 C% G
POSTGRES_PASSWORD: your_password
; w9 K4 Q- a1 L2 d" U: c1 f POSTGRES_DB: nocobase) H! a- \- E' R! }/ O* m
ports:. l# j$ {" |8 ]2 s
- "5432:5432"
& a6 C( G" K& {$ B- e7 T ```
2 |$ t2 J9 L3 s: @) [! ^9 i3 |6 r- 启动 Docker 容器:
$ |# J/ G4 b+ U% S4 A& W! c% B ```bash
: ], v! X1 {$ ~& v- e' I& f docker-compose up -d
3 h; ?& I* k/ h+ s ```! H; c' b5 {; a* S. p( w
4 v- z5 e( h' u#### 5.2 配置 HTTPS
* N1 q# [% O# @2 v5 Q* ?0 @- 使用 Nginx 反向代理并配置 HTTPS:
& @, j8 ] b/ h, ^ ```nginx
0 A1 G* D9 O! S$ o/ h server {
7 U7 e2 d* C) M% p; e listen 80;" W5 L+ p; W$ Q7 y9 o: ^
server_name yourdomain.com;
* c( C" w; H1 s return 301 https://$host$request_uri;
8 `7 ]% o: t5 j! d% ? p }3 N- i7 R- g0 j6 ]
" ^1 k) ^( U* s4 E: g, Z6 m) B server {
- a- p) |; f# |% h) Q: E. b listen 443 ssl;
& U) B, b/ s: v8 @) l, ` server_name yourdomain.com;" \% H4 B* O/ H ^& v1 W b2 B2 b
9 B# B" D6 D" Y& f& T. x A ssl_certificate /path/to/your/certificate.crt;
$ N% h( y$ M& `: P' b4 s* b ssl_certificate_key /path/to/your/private.key;
5 J- K) z( W, M, i
3 f! y. j' t( R2 Y1 ? location / {
4 u# h( l! c: I, E0 d proxy_pass http://localhost:3000;
( o, s% A: R! Q( g proxy_set_header Host $host;
2 E' r, l* S4 d) }0 o, P- B* ]& p proxy_set_header X-Real-IP $remote_addr;$ g9 _( @' I( ?* O
}
9 z2 P. w/ e6 d2 \2 F6 {# s }
X9 b0 [, u3 S/ I* ?$ }5 W/ n' u7 m ```$ _5 V4 Y6 q' q4 O- T7 `
! ?5 I1 V/ m8 ?3 v5 L$ e8 F4 f---2 F$ K' @7 c* V
) r5 }2 s* ~6 T$ g) {! F/ V
### **6. 总结**1 G0 x6 F. P& U0 c
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|