Plandex 开源的AI编码引擎初体验

本文最后更新于 97 天前, 如有失效请评论区留言.

Plandex 开源的AI编码引擎初体验

再也不需要自己动手写代码了,目前还不太完善,但是基本能满足需求了。下面以私有化部署为例。

什么是Plandex

Plandex 是一个开源的、基于终端的 AI 编码引擎,可借助使用 LLM 处理复杂的开发任务。

它组合多个Agent来完成跨多个文件的任务并对响应进行建模。分配任务时,会自动继续工作,直到确定任务完成。

应用场景

  • 现有项目添加新的特性功能
  • 编写自动化测试脚本
  • 修复bug
  • 重构代码
  • 使用不熟悉的技术栈
  • 等等

特性

  • 版本控制, 独立的版本控制暂存区域与git的版本控制隔离,支持分支和rewind特性(rewind简单理解记忆助手)
  • 强大的上下文管理, 时刻保持已经加载的文件处于最新状态,且让你清楚上下文变更了什么

不足

  • 不自动执行代码
  • 自动选择上下文

模型支持

  • 推荐使用gpt-4o-mini, 目前代码里还未集成,需要手动添加一下

其他

  • 支持多平台,语言没限制。

部署方式

仅测试过k8s部署版本

docker部署

services:

  postgresql:
    image:  ccr.ccs.tencentyun.com/k7scn/postgresql:16
    container_name: postgresql
    # ports:
    #   - '5432:5432'
    volumes:
      - 'postgresql_data:/bitnami/postgresql'
    environment:
      - 'POSTGRESQL_DATABASE=plandex'
      - 'POSTGRESQL_USERNAME=plandex'
      - 'POSTGRESQL_PASSWORD=plandex'

  plandex:
    image: ccr.ccs.tencentyun.com/k7scn/app-plandex-server
    container_name: plandex
    ports:
      - '8080:8080'
    depends_on:
      - postgresql
    environment:
      - 'DATABASE_URL=postgres://plandex:plandex@postgresql:5432/plandex?sslmode=disable'
      - GOENV=development
      - PLANDEX_BASE_DIR=/data
    volumes:
      - 'plandex_data:/data

volumes:
  postgresql_data:
    driver: local
  plandex_data:
    driver: local

上面是示例compose文件,保存为plandex.yaml

docker compose -f plandex.yaml down -v
docker compose -f plandex.yaml pull
docker compose -f plandex.yaml up -d
# sleep 等待一会儿, 正常不需要,需要依赖pg起来
docker compose -f plandex.yaml restart plandex

上面的docker部署未测试哈,也可以参考官方部署

git clone https://github.com/plandex-ai/plandex.git
cd plandex/app
cp _env .env
# edit .env to override any default environment variables
docker compose build
docker compose up

k8s部署

手动创建pg相关库

CREATE USER plandex WITH PASSWORD plandex;
CREATE DATABASE plandex OWNER plandex;
GRANT ALL PRIVILEGES ON DATABASE plandex TO plandex;

将下面的yaml保存为plandex.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: plandex
  namespace: nat
spec:
  storageClassName: longhorn
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
  labels:
    app: plandex
  name: plandex
  namespace: nat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: plandex
  updateStrategy:
    type: InPlaceIfPossible
  template:
    metadata:
      labels:
        app: plandex
    spec:
      tolerations:
      - operator: Exists
      nodeSelector:
        node-role.kubernetes.io/storage: "true"
      containers:
      - image: ccr.ccs.tencentyun.com/k7scn/app-plandex-server
        imagePullPolicy: Always
        name: plandex
        ports:
        - containerPort: 8080
          protocol: TCP
        env:
        - name: GOENV
          value: "development"
        - name: DATABASE_URL
          value: "postgres://plandex:plandex@10.25.25.25:5432/plandex?sslmode=disable"
        - name: PLANDEX_BASE_DIR
          value: "/data"
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
        volumeMounts:
        - mountPath: /data
          subPath: data
          name: plandex
      restartPolicy: Always
      volumes:
      - name: plandex
        persistentVolumeClaim:
          claimName: plandex
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: plandex
  name: plandex
  namespace: nat
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: plandex
  type: ClusterIP

创建部署

kubectl apply -f plandex.yaml

安装cli

curl -sL https://plandex.ai/install.sh | bash

配置

基于自托管实验

创建账号

到这里需要,看下容器的日志,因为设置为开发者模式,验证码直接看容器日志就可以了,如果是生产模式,需要配置邮箱相关

2024/08/31 06:37:24 Received request for CreateEmailVerificationHandler
2024/08/31 06:37:24 Development mode: Verification pin is D5caxd for email i@ysicing.net
2024/08/31 06:37:24 Successfully created email verification

验证码就是D5caxd

剩下的就没有什么了,创建组织或者加入组织,第一次肯定是新建

配置GPT相关环境变量

根据自己的情况配置,最好支持多模态、图片识别

export OPENAI_API_BASE=https://oneapi.i.ysicing.net/v1
export OPENAI_API_KEY=sk-gACJ1kjv6BnyoqVHDbA20eD0F0Ba442eBb0028086dA1B3C1

查看模型, 发现不支持gpt-4o-mini

plandex models available

手动添加gpt-4o-mini, 具体参考如下

  • 相关参数根据推荐值写就行
  • calling supportedmulti-modal相关情况,根据自己的API接口灵活调整,不过我发现Is function calling supportedAre streaming function calls supported较多API中转都会报错403,所有选择no

这里的功能设置会影响role的角色的配置, 一开始可以设置yes,调用的时候有报错在改

查看添加是否成功

plandex models available

设置默认模型

plandex set-model default

  • planner: streaming支持
  • 其他: function calling支持

具体角色可以参考文档models/roles

实战

基于CodeGPT实践,目前CodeGPT不支持DeepSeek, 新添加一个需求支持上。

下载代码

git clone https://github.com/appleboy/CodeGPT.git
cd CodeGPT

new

初始化

plandex new

加载上下文

plandex load -r .

如果有提示Gpt-4o-mini does not support images in context 配置忽略图片

cat .plandexignore
images/
*.png

设置提词

支持多种方式:inline模式,如下所示

  • plandex tell -f prompt.txt
  • plandex tell # vi模式
  • inline模式,如下所示
plandex tell "目前已经支持OpenAI和Azure, 以及Gemini。现在我想额外支持DeepSeek,其接口兼容OpenAI格式,地址为https://api.deepseek.com/v, 其可用模型有deepseek-chat和deepseek-coder,请帮我实现"

review代码

plandex diff

或者

plandex changes

apply

接受代码,当然也可以拒绝

plandex apply

拒绝的话可以选择也可以指定文件

plandex  reject openai/openai.go

其实在review的时候拒绝体验最好😂

其他命令

每次向 Plandex 发送提示或 Plandex 回复时,计划的对话都会更新。对话受版本控制,可以进行分支

plandex convo --plain

对话摘要

plandex summary

plandex log

其他问题

  • 如何修改模型参数,简单看了一下没发现,删除重新添加最快plandex models rm gpt-4o-mini

成本

成本不是问题,模型只会越来越便宜,这只是进行了1-2轮,如果要想代码可用至少得跑上好几轮不止。

最后

这就是未来的趋势,我们只是高质量需求的搬运工,产品工程师

Sponsor

Like this article? $1 reward

Comments