试试deepseek-engineer:功能强大的编码助手应用程序

试试deepseek-engineer:功能强大的编码助手应用程序

deepseek-engineer包含一个功能强大的编码助手应用程序,该应用程序与DeepSeek API集成,用于处理用户对话并生成结构化JSON响应。通过直观的命令行界面,它可以读取本地文件内容,创建新文件,并实时对现有文件进行差异编辑。

官网:

https://github.com/Doriandarko/deepseek-engineer

开始实践

尽管现在由于deepseek太优秀,官网停止了新用户体验(主要是无法充值),我们可以自己搭建一台deepseek API服务器来跑deepseek-engineer。

下载源代码

git clone https://github.com/Doriandarko/deepseek-engineer

安装依赖库

进入源代码的deepseek-engineer目录,使用pip安装依赖库

pip install -r requirements.txt

后面实践中,发现有openai和dotenv的报错,那就再安装这两个库。 我是因为一开始忽略了使用requirements.txt文件安装库,后面手工补的,所以会单独安装了python-dotenv和openai这两个库。

pip install python-dotenv openai

因为有些库可能其它软件因为依赖关系已经安装过,但是安装的版本偏低,所以有时候需要-U 进行升级版本。

比如

pip install openai -U

启动后,提示需要openai的key,所以需要在.env文件中,放入key和url

配置key和url

在deepseek-engineer目录创建.env文件,

将key和url存入.env文件,当然这里url没有用到,程序中的url设置需要到源代码里改。两个变量同时写是习惯问题。

OPENAI_API_KEY="DEEPSEEK_API_KEY"
base_url="http://127.0.0.1:1337/v1"

修改源代码main.py

源代码main.py里修改base_url为:"http://192.168.1.5:1337/v1" ,也就是自己搭建的deepseek 模型API服务地址。如果有deepseek官方api权限,就更好了,那样源代码里就不用做任何修改了,直接使用原来的这句base_url="https://api.deepseek.com"。

自己搭建deepseek API服务,可以参考这里:FreeBSD下安装GPT4Free的API服务,即pip install g4f[api]-CSDN博客

修改main.py源代码: 

client = OpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    # base_url="https://api.deepseek.com"
    base_url="http://192.168.1.5:1337/v1"
)  # Configure for DeepSeek API

启动

在deepseek-engineer目录直接启动服务:

python main.py

启动起来这个样子

┌─────────────────────────────────────────────────────────────────────────────┐
│ Welcome to Deep Seek Engineer with Structured Output (and CoT reasoning)!🐋 │
└─────────────────────────────────────────────────────────────────────────────┘
Use '/add' to include files in the conversation:
  • '/add path/to/file' for a single file
  • '/add path/to/folder' for all files in a folder
  • You can add multiple files one by one using /add for each file
Type 'exit' or 'quit' to end.

You> 你好

Thinking...

这时候有问题就可以问它了,比如我们让它创建一个文件,整个过程输出:

E:\github\deepseek-engineer>python main.py
┌─────────────────────────────────────────────────────────────────────────┐
│ Welcome to Deep Seek Engineer with Structured Output (and streaming)!🐋 │
└─────────────────────────────────────────────────────────────────────────┘
To include a file in the conversation, use '/add path/to/file'.
Type 'exit' or 'quit' to end.

You> hello ,please create a new python file about "print hello world"

Assistant> {
  "assistant_reply": "I've created a simple Python file that prints 'Hello, World!' to the console. This is a classic introductory program that demonstrates basic output functionality in Python.",
  "files_to_create": [
    {
      "path": "hello_world.py",
      "content": "# Simple Python program to print 'Hello, World!'\n\nprint('Hello, World!')"
    }
  ]
}

✓ Created/updated file at 'hello_world.py'

真是太棒了!

测试启动r1.py

后来测试了启动r1.py ,但是没成功。

python r1.py

当然代码里也进行了相应的修改,修改了url之后,会报错 Model not found:deepseek-reasoner' ,因为g4f里面只有deepseek-r1模型,而没有deepseek-reasoner模型。

在源码里修改模型名字为deepseek-r1,会报错'ChoiceDelta' object has no attribute 'reasoning_content' 。这里就没再调试下去了。

总结

deepseek-engineer是跟DeepSeek API绑定的,如果不修改代码的话,它是不支持任何其它AI大模型的。 即使自己搭建大模型API服务器,也要根据需要修改模型名字等信息。

让它创建一个hello world的python文件,它果然创建成功了!

但是有时候还是会有这个报错:

Failed to parse JSON response from assistant

我的理解,是自己搭建的deepseek api服务器还是没达到官方的精确输出?

先就这样,回头再跟open interpreter等项目比较下看看。

DeepSeek工程师🐋
概述
该存储库包含一个功能强大的编码助手应用程序,该应用程序与DeepSeek API集成,用于处理用户对话并生成结构化JSON响应。通过直观的命令行界面,它可以读取本地文件内容,创建新文件,并实时对现有文件应用差异编辑。
主要特点
DeepSeek客户端配置
自动配置API客户端以使用具有有效DEEPSEK_API_KEY的DeepSeek服务。
连接到环境变量中指定的DeepSeek端点,以流式传输类似GPT的补全。
数据模型
利用Pydantic对文件操作进行类型安全处理,包括:•FileToCreate——描述要创建或更新的文件。
•FileToEdit–描述现有文件中的特定代码段替换。
•AssistantResponse——构建聊天响应和潜在的文件操作。
系统提示
一个全面的系统提示(system_prompt)引导对话,确保所有回复都严格遵守JSON输出,并可选择创建或编辑文件。
辅助功能
read_local_file:读取目标文件系统路径并以字符串形式返回其内容。
create_file:使用提供的内容创建或覆盖文件。
show_diff_table:在丰富的多行表中显示建议的文件更改。
apply_diff_edit:将代码段级别的修改应用于现有文件。
“/add”命令
用户可以键入“/add-path/to/file”来快速读取文件内容,并将其作为系统消息插入对话中。
用户还可以键入“/add-path/to/folder”来添加目录中的所有文件(不包括二进制文件和隐藏文件)。
这允许助手参考文件内容以进行进一步讨论、代码生成或差异建议。
对话流程
维护会话历史记录列表,以跟踪用户和助手之间的消息。
通过DeepSeek API对助手的回复进行流式处理,将其解析为JSON,以保留文本响应和文件修改说明。
互动环节
运行脚本(例如:“python3-main.py”)在终端上启动一个交互式循环。
输入您的请求或代码问题。输入“/add-path/to/file”将文件内容添加到对话中。
当助手建议新的或编辑的文件时,您可以直接在本地环境中确认更改。 

调试

启动main.py报错No module named 'openai'

python main.py

Traceback (most recent call last):

  File "/Users/skywalk/github/deepseek-engineer/main.py", line 9, in <module>

    from openai import OpenAI

ModuleNotFoundError: No module named 'openai'

安装openai试试

ok了,说没有env

这两个的安装命令:

pip install python-dotenv openai

报错,The api_key client option must be set 

Traceback (most recent call last):

  File "/Users/skywalk/github/deepseek-engineer/main.py", line 24, in <module>

    client = OpenAI(

             ^^^^^^^

  File "/Users/skywalk/py312/lib/python3.12/site-packages/openai/_client.py", line 110, in __init__

    raise OpenAIError(

openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable

写个.env文件,将内容放进入。

OPENAI_API_KEY="DEEPSEEK_API_KEY"
base_url="https://127.0.0.1:1337"

报错✗ DeepSeek API error: Connection error.

因为g4f提供的是http服务,所以在源代码里, 将url地址从https转为http

    # base_url="https://api.deepseek.com"

    base_url="http://192.168.1.5:1337/v1/chat/completions/"

报错变成:✗ DeepSeek API error: Error code: 404 - {'detail': 'Not Found'} 

明白了,原来deepseek自动去找地方:

INFO:     192.168.1.2:50183 - "POST /v1/chat/completions/chat/completions HTTP/1.1" 404 Not Found
INFO:     192.168.1.2:50206 - "POST /chat/completions HTTP/1.1" 404 Not Found

也就是这个软件里,api会自动加上/chat/completions

而g4f,它的api url是:/v1/chat/completions

明白了,url用v1就行了

    base_url="http://192.168.1.5:1337/v1/"

交互后报错:✗ Failed to parse JSON response from assistant

你可以直接运行 `hanoi.py` 文件来查看汉诺塔问题的解决步骤。

✗ Failed to parse JSON response from assistant

尝试修改main.py文件源代码:

使用re正则表达式,对full_content的字符串进行处理,提取出里面类似 ```json { "key": "value" }```  的部分:

        # 使用正则表达式提取 JSON 部分
        import re
        pattern = r'```json\s*(.*?)\s*```'
        match = re.search(pattern, full_content, re.DOTALL)
        if  match:
            output=match.group()
        else :
            output=full_content
        # print(f"==debug output json={output}")
        try:
            # parsed_response = json.loads(full_content)
            parsed_response = json.loads(output)


感觉修改后,效果好了一些。

                        
具体见链接:尝试解决deepseek-engineer启动后交互报错问题:Failed to parse JSON response from assistant-CSDN博客

Windows下启动报错: cannot import name 'OpenAI' from 'openai'


Traceback (most recent call last):
  File "E:\github\deepseek-engineer\main.py", line 9, in <module>
    from openai import OpenAI
ImportError: cannot import name 'OpenAI' from 'openai' (E:\Program Files\anaconda\Lib\site-packages\openai\__init__.py)

更新openai库

pip install openai -U

问题解决。

启动r1.py报错cannot import name 'Mapping' from 'collections'

    from collections import Mapping
ImportError: cannot import name 'Mapping' from 'collections' (E:\Program Files\anaconda\Lib\collections\__init__.py)

更新库prompt_toolkit

pip install prompt_toolkit -U

并更新其它需要的库。

启动r1.py报错Model not found:deepseek-reasoner'

✗ DeepSeek API error: Error code: 404 - {'error': {'message': 'ModelNotFoundError: Model not found:
deepseek-reasoner'}, 'model': 'deepseek-reasoner'}

G4F提供的api里,模型只有

deepseek-r1

所以要修改代码,改模型名字

改为

            # model="deepseek-reasoner",
            model="deepseek-r1",

改模型名字后启动r1.py报错'ChoiceDelta' object has no attribute 'reasoning_content'

✗ DeepSeek API error: 'ChoiceDelta' object has no attribute 'reasoning_content'

好吧,这里不知道该怎么办了,先搁置。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值