|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
+ R! c" I1 Y) ]9 C9 t5 `; o- f' h! g( d
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。2 J* R7 }; Q. z8 j
0 R$ K! B6 ^) O% E) @) w, f9 e5 _: f---
$ W& W1 Y+ L; \- [: A6 c; o, A" `6 I0 a1 `" E( I* r
### **1. 环境准备**% X8 d( @" `* a9 k' g) S
#### 1.1 服务器要求
- H# H& G. j$ m- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
. j! L# {( N7 | \) Z2 }- **Node.js**:安装 Node.js v16.x 或更高版本。6 n( l0 B2 k( k1 }1 q6 V% G. w! D6 B$ J
- **数据库**:PostgreSQL(推荐)或 MySQL。+ U g6 i5 e. |% \+ }
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
j% J1 n s) }/ Z
+ J* R$ e* ^2 Q w#### 1.2 安装依赖
7 m0 ]$ _- h2 J F& t" w" V# [! d- 安装 Node.js 和 npm:
& T" V7 @" |- [8 l ```bash6 r% U' e ]; L- q
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -+ ~0 j" h( [( J% V0 k. M
sudo apt-get install -y nodejs
& z6 h' [6 K* n4 C- J& O ```5 n1 ^" I& k3 R, b
- 安装 PostgreSQL:* x1 [& Q9 [6 D/ z0 O6 z! W
```bash
( v2 N, B, |! n3 P2 L sudo apt-get install postgresql postgresql-contrib
. i. h8 P) D J) i sudo systemctl start postgresql
% h9 o& [' X5 K7 e sudo systemctl enable postgresql
4 W: Q+ U6 f4 D: v: p: u1 J0 [ m' N ```
( M7 G4 e- d2 I3 C1 F3 t+ @# t8 R( A( T5 o$ s5 e: ^
---7 `, O: f! V1 {) o. R) E
1 _; T! J& l6 G# z" t# j
### **2. 安装 NocoBase**
6 {/ ?5 ^+ L+ U( j5 [6 D#### 2.1 下载 NocoBase
+ T6 S# A* n |& p" R- s8 `1 Y- 从 GitHub 克隆 NocoBase 仓库:' {+ \$ D' m% A0 ~* d
```bash( A$ i% _, L# h+ C: H4 _# A$ z+ I& {& K
git clone https://github.com/nocobase/nocobase.git
- d+ i8 m2 r- Y5 _$ ]0 Y! j cd nocobase3 i) Y; v4 ]6 D/ o$ l0 b8 d3 U1 X
```7 m& v# I- H2 z) d5 w0 Y
! L& Q n) O. f- O1 O9 ]% P4 S5 K
#### 2.2 安装依赖* |' [# L( L1 e- g: f) e
- 安装项目依赖:
/ u" r1 `$ o8 W) D! m8 S+ v ```bash
) a( |; X* C% X- R; ^% N/ i/ t: N' ` npm install8 F3 f/ x6 a: }2 c; X+ o% S% M
```
# j8 t3 ]* d( r2 ~) T# i( }( g( c" f% i+ C/ q& h6 h8 I
#### 2.3 配置数据库8 l; A/ f& x; [. {0 S, b0 {2 _
- 创建 PostgreSQL 数据库:2 [$ o* \7 b2 m$ R3 M; [
```bash. r ~" O; x" [( h( e+ {
sudo -u postgres psql4 J6 L3 S. V9 G# ?4 D* l1 n
CREATE DATABASE nocobase;
$ e8 R* T% \- V CREATE USER nocobase_user WITH PASSWORD 'your_password';7 l" o/ r7 O$ ] l" A# c5 E
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;5 J: v; B1 t/ l. W. G% {
\q/ c% b, Q; d. g; U
```, q0 U9 s% I- `/ i r
- 修改 NocoBase 配置文件:
2 D9 R& v4 U- o6 q7 a$ {6 B5 N 编辑 `config/config.json`,配置数据库连接信息:* w" T6 [! _6 S/ {; l' g
```json# n1 }4 v% p* j5 L# y2 E1 X
{
3 v! M( T; a c b, F5 i "database": {6 g# X, P S* h: y
"dialect": "postgres",2 y" m* I# I# I" C3 F
"host": "localhost",
) |* a' X0 ~4 i "port": 5432,+ P3 B$ ]! Z4 Z+ p# F
"username": "nocobase_user",$ r( Z. `0 ]2 j2 p8 W2 U2 z3 N Q
"password": "your_password",
! o9 E, l% K9 |+ w9 R "database": "nocobase"
' Y$ ^# d$ N) _( q }
+ }- V# z3 Y! q( u }8 ~! b+ Y; K) G+ x( @) ]3 Y
```- T! _- A; c7 c7 G6 L9 C
+ V. x' f0 d8 t* [#### 2.4 初始化数据库
{/ o$ h5 d) }3 y3 \- 运行数据库迁移脚本:
" Z6 i5 D* |- ?- P4 T ```bash% p+ s" ~: c1 _0 L; P! h
npm run db:migrate; }. {1 I, C# p# Z* d, n, U; ]
```
2 d& q# d9 P7 s& C& V8 s
" R& E9 q4 j6 o( [5 B0 @" A#### 2.5 启动 NocoBase
; b+ z$ J+ \, w- 启动开发服务器: I' F+ Z8 m7 X' Z$ F+ G- @
```bash
: X1 I/ X/ J& G$ T$ I npm run start
9 d/ u5 J8 Z4 D$ o4 v# ` ```
6 p( G3 m/ {8 j3 c/ p2 e- 访问 NocoBase:
& X# b/ M, F/ z$ F J 打开浏览器,访问 `http://localhost:3000`,完成初始设置。6 Y( C4 }' s* ?8 r% R5 D4 d
, g0 x8 Z; Z$ U9 r$ ^! }---4 w" h; P0 j# O. |0 _; x
/ L$ f& P! h: P9 @2 ~" J! E### **3. 集成 DeepSeek**& I& s! F& P* p$ I8 H3 M0 K
#### 3.1 创建 NocoBase 插件
3 [/ A T* G0 r8 p _; N! |( E- 使用 NocoBase CLI 创建插件:4 ]) s/ h! x5 D9 k* P- c- W+ f- k+ V; n
```bash
{" S# C1 F6 _7 s+ ^ npm run cli plugin:create deepseek-integration
! t) n0 E' p6 c. F% q cd plugins/deepseek-integration; A3 S) @5 q) L6 m+ \1 c1 I
```, L. ]3 B$ [$ _# Z! U I" Q% a, b' U
- O2 U C/ L9 j" @ F8 T# E5 g
#### 3.2 安装 DeepSeek SDK
7 y* P% w; h0 z- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
4 {! M: N% v/ a4 H+ Z8 J( C ```bash d0 w1 Z) @) V, h; D
npm install deepseek-sdk+ a& y0 F5 c1 m6 @% e
```
, r# [) r$ g5 N3 e+ K# R3 F& ^$ c' c; Z% d4 i
#### 3.3 配置 DeepSeek API 密钥
/ k$ z P) I" D9 K6 p$ w) |- 在插件配置文件中添加 DeepSeek API 密钥:
! ~ o" x& Z% j1 @4 Z( b% r6 j 编辑 `plugins/deepseek-integration/config/config.json`:* d. J/ U6 ^/ d( E, x) J
```json* H$ o9 R! ^0 P; L- F. a6 U: K" [
{
7 T4 t) T0 e7 m% ]$ g6 B "deepseek": {7 P; K8 w' X) c% r. y% {3 E% A
"apiKey": "your_deepseek_api_key"* X- J( l Z3 ?: Y# n
}
, t2 @, G- i& X S! G$ J1 D: T }
( h' G3 X- Q: h: S" f, g. j3 x ```
& R2 g1 P3 {& f( E& F! b
& _' Z3 \ A& P" e3 R9 e#### 3.4 实现 DeepSeek 服务
Q' E: t( o6 h/ C. i, H- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
- E4 U3 B8 Z' _! k ```javascript& M8 f" J$ B. m. E
const DeepSeek = require('deepseek-sdk');
2 ]. l. `! ~( S" V5 L e
& L8 Q! `/ I% t class DeepSeekService {- V- y+ @ c I- O0 F( I
constructor(apiKey) {
/ k: X2 Z. a1 b5 ? this.deepseek = new DeepSeek(apiKey);
: E' V5 r+ G Z, X" R6 q" p }
' Q E1 t$ d+ Y4 R5 S/ N$ o# }% c F8 ?+ H$ k; u: _
async query(prompt) {
/ R5 ]$ \) y/ G( | const response = await this.deepseek.complete({5 z6 ~/ d) `4 x t5 g3 J- n
prompt: prompt,
6 i& a; q, ]5 h5 I max_tokens: 150
5 M9 g, M; _% x* K, \; E });2 |3 {. e+ w1 Z
return response.choices[0].text.trim();# A$ {& _+ C9 }# l3 v
}5 O3 u1 J+ p: C# `; m
}
9 J9 F7 I! n$ V! Y. k m& ]! P2 U( n% b3 [% F
module.exports = DeepSeekService;. v2 b9 ~& [( @1 U( [
```( y# L; m. z; T
% |6 H5 D3 d U/ d5 Z#### 3.5 创建 API 路由
3 _; X" e7 I' R% |, \/ A5 U- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:7 I' _; K) }/ C. o& w
```javascript
! P( S& L1 |/ m const express = require('express');! P$ c( W; m- J' S- c
const DeepSeekService = require('../services/deepseekService');! T" x- E7 r+ G7 l
const router = express.Router();, j/ j! T3 p. b5 O
const config = require('config');
% p9 I S6 Z$ X5 m, s6 z; V) `/ S! |& O9 x4 x5 P3 t
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
[2 }4 i# R5 d, h8 p, \+ S! j7 B# ^ j$ A
router.post('/query', async (req, res) => {, G* V) ~- t7 @4 V, @) v% R
const { prompt } = req.body;( S5 I8 Y7 A; u4 O5 c. n
try {
1 ^7 W" B$ }4 ]* K5 f const result = await deepseekService.query(prompt);
$ N8 z- v7 k1 O, L+ T; ] res.json({ success: true, result });) B0 ], b0 x" u$ g( D/ x1 Y( Y# o
} catch (error) {! C/ r% U( A6 l/ b8 `+ a/ B ?
res.status(500).json({ success: false, error: error.message });
& J# C+ h. S8 m) G- ]0 S }4 ]3 M1 e* D6 V# U0 S9 z
});
9 M6 B5 s7 }1 h& G( Q; d# U, R- D7 K7 {1 A* }
module.exports = router;
6 z: n5 w) i! T ```' N! W! t' w2 [( N
% V6 d* Q1 v, M' n. J
#### 3.6 注册插件
+ c1 k4 B9 n6 e; e) E8 S; b, U% D- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
/ a4 @3 b" ~, G# ~ ```javascript. K! r; c1 [( _1 o9 R0 ]; C( V
const deepseekRoutes = require('./routes/deepseekRoutes');4 b" P( B+ b1 Z4 E+ X3 Z
: H8 t% k% j& o/ H k* @& } module.exports = function(app) {7 S/ Y- Q; O/ ?7 b2 {
app.use('/api/deepseek', deepseekRoutes);
' D9 w# k5 H" @5 C8 ?! m }; R: I. O5 n8 T5 J. {9 Q7 o
```6 V5 g6 R6 S" B. N
) V# v6 w7 [* O; ^. ~---
7 m P9 s, U6 {$ J# G/ j+ `
! u0 v% t- l ^+ }( _9 b+ w### **4. 测试集成**
0 j1 q1 r, A* o2 n# o- E#### 4.1 启动 NocoBase* r( n- j: a& e" n8 S* k$ t7 ]2 d
- 启动 NocoBase:
9 v& Q' r& a. H' \% ~3 ^, I ```bash
6 z0 V. ^+ x1 ~5 o! R" j- n npm run start" P2 ]! q. d9 V" h# ~. d- L6 T
```1 H& j; |7 _! `8 b; H
7 M4 @1 |* @8 H4 ^4 X1 a
#### 4.2 测试 DeepSeek API3 \: G8 D T( O
- 使用 `curl` 或 Postman 测试 API:
5 E. K: Q" d2 I2 i( ]# q ```bash
1 K. `& \0 r4 N0 v" y7 H curl -X POST http://localhost:3000/api/deepseek/query \
^4 G; R% G1 o, ? -H "Content-Type: application/json" \
0 n0 s. E+ R$ c8 A! Q1 Q j -d '{"prompt": "显示最近三个月联系过的客户"}'
: s8 j- ~2 `. n7 E ```( ]$ m4 [5 Q* H2 ~; _, n b0 G- f7 I; |
9 s! t3 G$ n! E4 T) `7 |---
- @+ O' a, l1 A/ H
9 l% q) n: [8 w/ C( t& Z' `5 T### **5. 部署到生产环境**; g( d! M' l* T
#### 5.1 使用 Docker 部署
9 ] C3 s( a$ @2 [- 创建 `docker-compose.yml` 文件:
5 D( y2 A2 o* t/ H* n, g ```yaml/ {" m, k" N0 F: P+ H
version: '3'
8 F9 b3 v. o u. g+ p/ z; y: O services:
& v8 d5 q% M0 o0 M- \; B$ |/ F app:
9 z4 n1 K% J# Q& O8 { image: node:16; u) A/ @: U# K1 J4 ]+ h
container_name: nocobase: e2 q! I' S- r5 N1 R* P1 A
working_dir: /app$ Z0 I0 G- C6 k1 h
volumes:
1 _( C: L( n! b - .:/app
& Z. _, B+ g) x( n q- t5 ` ports:5 a6 X8 ]& {% M
- "3000:3000"( c& ?: ?( L9 v3 A+ t
environment:
" H/ R8 b, U% |5 Y - NODE_ENV=production8 U7 u* E+ p) B& B0 D/ n" W9 U
command: npm run start
0 I+ W2 ^; M5 l1 t- a$ V9 I u db:
l6 h3 K+ s* X) P: p/ L3 P image: postgres:131 W( i5 A. v \* ~% u
container_name: nocobase_db' e7 P8 m7 C6 v& b8 r2 C% T
environment:
! A) ~5 Q& {7 b POSTGRES_USER: nocobase_user
$ D/ `$ c$ }5 I% j K$ \% P POSTGRES_PASSWORD: your_password
; m7 ~, S+ Y* W% o5 I POSTGRES_DB: nocobase
8 n9 H7 W. v: L* g5 e9 E9 P ports:
5 ]; D- ^8 P; [) ^0 Z$ M* p - "5432:5432"
" D! t! D: S/ U2 e( H& ^" c1 E ```
) f. S' E1 I# p2 u9 r2 _- 启动 Docker 容器:- p ~7 z1 e# z
```bash9 z3 L) v$ @" j/ h% A: S7 L
docker-compose up -d
! d6 E) g3 T3 F8 ? ```( u+ |. z: p n$ z! q" Q
6 Q& x$ @7 h, u8 i
#### 5.2 配置 HTTPS
$ u( D& x* g8 M2 o! k- 使用 Nginx 反向代理并配置 HTTPS:
$ f6 q' R# ]* z) p ```nginx
0 f+ g1 q8 i% }' c' ]- h2 @ server {
0 n! x4 @/ N* }' ?+ R listen 80;# H5 D& O, L" [/ `1 q* o
server_name yourdomain.com;% G7 `: V- Q" P% a$ R
return 301 https://$host$request_uri;
, l, L' @/ [6 x7 `! Y3 d V }. b: H/ g1 L5 Q5 |
2 x' P: K, _9 @$ L8 u# m& ?
server {; m1 O$ F \: m F7 A
listen 443 ssl;. Q, U- j0 }' [& Y0 j; e9 g
server_name yourdomain.com;( b. p4 _4 r9 y" H& f/ l
, ?1 x# O0 ] q ssl_certificate /path/to/your/certificate.crt;
6 }" P$ n3 [& i ssl_certificate_key /path/to/your/private.key;
% f9 e F- s6 P
* w1 w+ R( j0 Z1 ] location / {
3 s3 P# U( {6 i; R# ]: i. e/ f proxy_pass http://localhost:3000;( \! m0 F5 N/ ^2 ]( \
proxy_set_header Host $host;- B S6 U+ {+ {$ z" I" U( y6 H9 |1 ^
proxy_set_header X-Real-IP $remote_addr;6 X# D" j6 B5 z$ N- g+ |
}
% w8 S7 x+ Q4 M1 S7 t }
# |5 {" h& o j/ `$ c ```8 p( e$ d/ M8 R; `5 z& I9 h* X0 U. v
" l, F% O2 K. l2 Z6 [4 n' u
---
( L, O! Z# Q& Q
! \6 r( ^/ Q( j4 F* [/ x### **6. 总结**
3 U+ g& Q& f2 R) q& q通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|