From 9ba8306b8d1c474071ab8d61148bbc38c5b2853a Mon Sep 17 00:00:00 2001 From: betterbeast2023 Date: Fri, 5 Jun 2026 21:11:32 +0800 Subject: [PATCH] c --- ...y. Never use Chinese or any other language | 0 local_ai_setup.md | 149 ++++++++ local_llm.md | 342 ++++++++++++++++++ merge_excel.py | 74 ---- merge_transactions.py | 63 ---- practice.ipynb | 66 +++- 6 files changed, 550 insertions(+), 144 deletions(-) create mode 100644 --system-prompt=Always respond in English only. Never use Chinese or any other language create mode 100644 local_ai_setup.md create mode 100644 local_llm.md delete mode 100644 merge_excel.py delete mode 100644 merge_transactions.py diff --git a/--system-prompt=Always respond in English only. Never use Chinese or any other language b/--system-prompt=Always respond in English only. Never use Chinese or any other language new file mode 100644 index 0000000..e69de29 diff --git a/local_ai_setup.md b/local_ai_setup.md new file mode 100644 index 0000000..559e32f --- /dev/null +++ b/local_ai_setup.md @@ -0,0 +1,149 @@ +# Local AI Coding Setup — Windows 11 (Aider + Ollama) + +## Hardware +- GPU: RTX 5070 Ti, 12GB VRAM +- RAM: 32GB +- OS: Windows 11 + +--- + +## Prerequisites + +### 1. Install Ollama +Download from https://ollama.com and install. + +### 2. Pull a model +```powershell +ollama pull qwen3-coder:30b # 18GB, strong coding model (MoE, VRAM+RAM split) +ollama pull gemma4:12b # 12GB, responds in English more reliably +``` + +Confirm models are available: +```powershell +ollama list +``` + +Confirm Ollama is serving: +```powershell +curl http://localhost:11434/api/tags +``` + +--- + +## Install Aider + +```powershell +pip install aider-chat +aider --version # should print version number +``` + +--- + +## Project Config + +Create `.aider.conf.yml` in your project root: + +```yaml +model: ollama/gemma4:12b +openai-api-base: http://localhost:11434/v1 +openai-api-key: ollama +edit-format: whole +map-tokens: 2048 +no-auto-commits: true +system-prompt: "Always respond in English only. Never use Chinese or any other language." +``` + +**Config notes:** +- `edit-format: whole` — more reliable file writes for local models (avoids code showing in chat only) +- `map-tokens: 2048` — limits repo map size, important for smaller context windows +- `no-auto-commits: true` — review changes before they hit git +- `system-prompt` — forces English responses (important for Qwen3 which defaults to Chinese) + +Switch models without editing the file: +``` +/model ollama/qwen3-coder:30b +``` + +--- + +## Optional: Performance Tuning (if inference is slow) + +Create a `Modelfile` in the project root: + +``` +FROM qwen3-coder:30b +PARAMETER num_ctx 8192 +PARAMETER num_gpu 99 +``` + +Register it: +```powershell +ollama create qwen3-coder-tuned -f Modelfile +``` + +Update `.aider.conf.yml`: +```yaml +model: ollama/qwen3-coder-tuned +``` + +**Why:** `num_gpu 99` maximizes VRAM usage. `num_ctx 8192` prevents the KV cache from +spilling too much into RAM. Recommended context range: 4096–16384. + +--- + +## Daily Aider Workflow + +Start Aider (reads config automatically): +```powershell +aider +``` + +| Command | What it does | +|---------|-------------| +| `/add src/foo.py` | Add file to context | +| `/drop src/foo.py` | Remove file from context | +| `/diff` | See pending changes | +| `/undo` | Revert last change | +| `/run pytest` | Run command, share output with model | +| `/run git rm --cached file.py` | Run git commands from inside Aider | +| `/clear` | Clear chat history (keep files) | +| `/settings` | Show loaded config (verify auto_commits, system_prompt) | +| `/model ollama/gemma4:12b` | Switch model on the fly | +| `/exit` | Quit | + +--- + +## Known Issues & Fixes + +### Model responds in Chinese +Cause: Qwen3 is a Chinese model and defaults to Chinese. +Fix: `system-prompt` in `.aider.conf.yml` (already included above). Restart Aider after config change. + +### Aider shows code in chat but doesn't write files +Cause: Model didn't follow Aider's edit format. +Fix 1: `/add target_file.py` before asking — hints the target file to the model. +Fix 2: `edit-format: whole` in config (already included above). + +### "File not found" / repo-map warnings for deleted files +Cause: File deleted from disk but still tracked in git index. +Fix: +```powershell +git rm --cached filename.py +``` +Or from inside Aider: +``` +/run git rm --cached filename.py +``` + +### Config changes not taking effect +Fix: Exit Aider (`/exit`) and restart. Config is only read at startup. + +--- + +## Verify Everything Works + +1. `ollama list` — model appears +2. `aider --version` — prints version +3. Start Aider, run `/settings` — confirm `auto_commits: False` and `system_prompt` present +4. Ask Aider to create a simple file — it should write to disk, not just chat +5. Response is in English diff --git a/local_llm.md b/local_llm.md new file mode 100644 index 0000000..019f2ad --- /dev/null +++ b/local_llm.md @@ -0,0 +1,342 @@ +# Local AI Coding Environment Implementation Plan + +## Objective + +Build a local-first AI coding environment on a Windows 11 workstation with the following requirements: + +### Hardware + +* NVIDIA RTX 5070 Ti 12GB VRAM +* 64GB+ system RAM (if available) +* Windows 11 +* WSL2 Ubuntu +* VS Code + +### Existing Software + +* Ollama installed and operational +* Qwen3-Coder 30B installed in Ollama +* Claude Code CLI installed +* Git installed + +### Constraints + +* Source code is confidential. +* All code must remain local by default. +* Cloud models may be used only as an optional fallback. +* Minimize API costs. +* Support large codebases. + +--- + +# Target Architecture + +```text +VS Code + | + +---- Continue Extension + | + +---- Claude Code CLI + | + +---- Aider + | + v + Ollama + | + v + Qwen3-Coder 30B +``` + +--- + +# Project Goals + +Implement and validate the following workflows. + +## Workflow 1: Local Chat + +Developer can: + +* Ask coding questions +* Explain code +* Generate code +* Review code + +using: + +```text +VS Code + + +Continue + + +Ollama + + +Qwen3-Coder 30B +``` + +--- + +## Workflow 2: Local Agent + +Developer can: + +* Refactor code +* Create files +* Modify files +* Run git-aware edits + +using: + +```text +Aider + + +Ollama + + +Qwen3-Coder 30B +``` + +--- + +## Workflow 3: Claude Code Optional + +Developer can: + +* Use Claude Code against local Ollama models +* Compare behavior against Aider +* Determine whether Claude Code provides additional value + +using: + +```text +Claude Code + + +Ollama + + +Qwen3-Coder 30B +``` + +--- + +# Deliverables + +Produce the following: + +## Deliverable 1 + +Environment verification script. + +Verify: + +* Ollama installed +* NVIDIA GPU visible +* CUDA available +* WSL functioning +* Qwen3-Coder model available + +Expected output: + +```text +PASS: Ollama +PASS: GPU +PASS: CUDA +PASS: Qwen3-Coder +``` + +--- + +## Deliverable 2 + +Aider installation guide. + +Include: + +### Linux / WSL installation + +Commands: + +```bash +pipx install aider-chat +``` + +or preferred installation method. + +### Ollama integration + +Configuration examples. + +### Verification steps + +Simple repository test. + +--- + +## Deliverable 3 + +Continue configuration. + +Create: + +### VS Code setup instructions + +Install Continue extension. + +### Model configuration + +Configure Continue to use: + +```text +Ollama +Qwen3-Coder 30B +``` + +### Example config files + +Include complete examples. + +--- + +## Deliverable 4 + +Claude Code local model integration. + +Research and implement the best available approach for: + +```text +Claude Code + -> +OpenAI-compatible endpoint + -> +Ollama +``` + +Requirements: + +* Use officially supported methods where possible. +* Avoid unsupported hacks. +* Document limitations. +* Provide rollback procedure. + +--- + +## Deliverable 5 + +Performance optimization. + +Analyze: + +### VRAM usage + +Qwen3-Coder 30B on RTX 5070 Ti 12GB. + +### Recommended quantization + +Evaluate: + +* Q4 +* Q5 +* IQ3 + +Recommend the best balance between: + +* Quality +* Speed +* Memory usage + +--- + +## Deliverable 6 + +Benchmark suite. + +Create repeatable tests: + +### Test 1 + +Generate a REST API. + +### Test 2 + +Refactor a medium-sized module. + +### Test 3 + +Write unit tests. + +### Test 4 + +Debug a failing application. + +Measure: + +* Completion time +* Accuracy +* Token throughput +* User effort + +Compare: + +```text +Aider + Qwen3-Coder 30B +Claude Code + Qwen3-Coder 30B +Continue + Qwen3-Coder 30B +``` + +--- + +# Preferred Outcome + +Primary development workflow: + +```text +VS Code + + +Continue + + +Qwen3-Coder 30B +``` + +Agent workflow: + +```text +Aider + + +Qwen3-Coder 30B +``` + +Optional advanced workflow: + +```text +Claude Code + + +Qwen3-Coder 30B +``` + +--- + +# Success Criteria + +The project is successful if: + +1. All code remains local. +2. No cloud services are required. +3. Developer can perform daily coding tasks locally. +4. Aider successfully edits repositories. +5. Continue provides a productive IDE experience. +6. Claude Code local integration is evaluated and documented. +7. Setup can be reproduced on a fresh machine. + +--- + +# Final Report + +Produce a final report containing: + +* Architecture diagram +* Installation steps +* Configuration files +* Benchmark results +* Known limitations +* Recommended workflow +* Future upgrade path + +The report should be suitable for long-term maintenance and onboarding of additional developers. diff --git a/merge_excel.py b/merge_excel.py deleted file mode 100644 index cb8a49a..0000000 --- a/merge_excel.py +++ /dev/null @@ -1,74 +0,0 @@ -import os -import sys -import pandas as pd -from pathlib import Path - -def merge_excel_files(input_dir): - """ - 合并指定目录下所有包含"交易流水"工作表的Excel文件 - """ - # 创建输出文件路径 - output_file = os.path.join(input_dir, "txn_summary.xlsx") - - # 存储所有数据的列表 - all_data = [] - - # 遍历输入目录中的所有文件 - for filename in os.listdir(input_dir): - if filename.endswith(('.xlsx', '.xls')): - file_path = os.path.join(input_dir, filename) - - try: - # 读取Excel文件的所有工作表 - excel_file = pd.ExcelFile(file_path) - - # 检查是否包含"交易流水"工作表 - if "交易流水" in excel_file.sheet_names: - # 读取"交易流水"工作表 - df = pd.read_excel(file_path, sheet_name="交易流水") - - # 检查数据是否为空 - if not df.empty: - # 添加源文件名列 - df['来源文件'] = filename - - # 将数据添加到列表中 - all_data.append(df) - else: - print(f"警告: 文件 {filename} 中的'交易流水'工作表为空") - - except Exception as e: - print(f"处理文件 {filename} 时出错: {e}") - - # 如果没有找到任何匹配的文件,退出 - if not all_data: - print("未找到包含'交易流水'工作表的Excel文件或所有文件都为空") - return - - # 合并所有数据 - merged_df = pd.concat(all_data, ignore_index=True) - - # 保存合并后的数据到输出文件 - merged_df.to_excel(output_file, index=False) - - print(f"成功合并 {len(all_data)} 个文件,结果已保存到: {output_file}") - -def main(): - # 从命令行参数获取输入目录路径 - if len(sys.argv) != 2: - print("请提供输入目录路径作为命令行参数") - print("使用方法: python merge_excel.py ") - return - - input_dir = sys.argv[1] - - # 检查输入目录是否存在 - if not os.path.isdir(input_dir): - print(f"错误: 目录 '{input_dir}' 不存在") - return - - # 合并Excel文件 - merge_excel_files(input_dir) - -if __name__ == "__main__": - main() diff --git a/merge_transactions.py b/merge_transactions.py deleted file mode 100644 index b1325ec..0000000 --- a/merge_transactions.py +++ /dev/null @@ -1,63 +0,0 @@ -import os -import pandas as pd -from pathlib import Path -import sys - -def merge_transaction_data(): - # 获取用户输入的路径 - input_path_str = input("请输入包含 Excel 文件的文件夹路径: ").strip() - input_dir = Path(input_path_str) - - # 检查路径是否有效 - if not input_dir.is_dir(): - print(f"错误:提供的路径 '{input_path_str}' 不是一个有效的目录。") - return - - all_data = [] - target_sheet = "交易流水" - - # 获取目录下所有的 excel 文件 (支持 .xlsx 和 .xls) - files = list(input_dir.glob("*.xlsx")) + list(input_dir.glob("*.xls")) - - if not files: - print("在该目录下未找到任何 Excel 文件。") - return - - for file_path in files: - try: - # 读取指定的 sheet - # 使用 pandas 的 read_excel,如果 sheet 不存在会抛出 ValueError - df = pd.read_excel(file_path, sheet_name=target_sheet) - - if df.empty: - print(f"跳过 {file_path.name}:工作表 '{target_sheet}' 为空。") - continue - - all_data.append(df) - print(f"成功读取: {file_path.name}") - except ValueError: - # 如果找不到指定的 sheet 名称,则跳过该文件 - print(f"跳过 {file_path.name}:未找到名为 '{target_sheet}' 的工作表。") - except Exception as e: - print(f"处理文件 {file_path.name} 时发生错误: {e}") - - if all_data: - # 合并所有 DataFrame - merged_df = pd.concat(all_data, ignore_index=True) - - # 定义输出路径 - output_file = input_dir / "txn_summary.xlsx" - - # 保存结果 - # 使用 openpyxl 作为引擎以确保兼容性 - merged_df.to_excel(output_file, index=False, engine='openpyxl') - print("-" * 30) - print(f"合并成功!") - print(f"总计处理文件数: {len(all_data)}") - print(f"结果已保存至: {output_file}") - else: - print("未找到包含 '" + target_sheet + "' 工作表的有效数据,未生成输出文件。") - -if __name__ == "__main__": - # 确保安装了必要的库:pip install pandas openpyxl - merge_transaction_data() diff --git a/practice.ipynb b/practice.ipynb index c1ef593..e480903 100644 --- a/practice.ipynb +++ b/practice.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "259a585b", "metadata": {}, "outputs": [], @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "id": "fe7bf6eb", "metadata": {}, "outputs": [ @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "id": "4bddedb8", "metadata": {}, "outputs": [ @@ -95,18 +95,70 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "b33dcb00", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "65\n", + "\n", + " !$&',-.3:;?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n" + ] + } + ], "source": [ - "set(text)" + "chars = sorted(list(set(text)))\n", + "vocab_size = len(chars)\n", + "print(vocab_size\n", + ")\n", + "print(\"\".join(chars\n", + "))\n", + "\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7c84058a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'!'" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stoi = {char:i for i, char in enumerate(chars)}\n", + "itos = {i:char for i, char in enumerate(chars)}\n", + "# print (itos)\n", + "\n", + "stoi['a'] # 0\n", + "itos[2]\n", + "\n", + "encode = lambda s: \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4f43742c", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": ".venv (3.12.10)", "language": "python", "name": "python3" },