IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    ysicing (i@ysicing.me)发表于 2024-08-31 07:46:48
    love 0

    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 supported和multi-modal相关情况,根据自己的API接口灵活调整,不过我发现Is function calling supported和Are 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轮,如果要想代码可用至少得跑上好几轮不止。

    最后

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



沪ICP备19023445号-2号
友情链接