试试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'
好吧,这里不知道该怎么办了,先搁置。