--- session: ses_1fd1 updated: 2026-05-08T14:24:46.168Z --- # Session Summary ## Goal 使 Orca Agent Framework 能够识别和调用 `~/.agents/skills` 目录下的 skills,同时集成 DeepSeek LLM 提供商支持。 ## Constraints & Preferences - 保持与现有 Ollama 集成的兼容性 - 默认使用 DeepSeek (deepseek-v4-flash) - Skills 目录: `~/.agents/skills` - Prompt-based tool calling (兼容不支持原生 function calling 的模型) - 流式输出支持 ## Progress ### Done - [x] 实现 DeepSeek 客户端 (`pkg/llm/deepseek.go`) - 支持 Chat 和 Stream API - [x] 更新配置系统支持 Provider 字段 (ollama/deepseek) - [x] 默认 Provider 改为 DeepSeek,默认模型 deepseek-v4-flash - [x] 更新 Kernel 根据 Provider 创建对应 LLM 后端 - [x] 更新 CLI 支持 DeepSeek 环境变量 (DEEPSEEK_API_KEY, DEEPSEEK_MODEL 等) - [x] 添加流式输出支持 (streamWriter, streamChat/syncChat) - [x] 修复 sandbox 默认工作目录为当前目录 (`.` 而非 `/tmp/orca/sandbox`) - [x] 修复 skills 加载路径为 `~/.agents/skills` - [x] 在 `main.go` 中添加 `k.InitPlugins()` 调用以加载 skills - [x] 在 LLMAgent 中添加 skillManager 字段和 WithSkillManager 选项 - [x] 将 skill 信息注入系统提示 (buildSystemPrompt) - [x] 所有 11 个包测试通过 ### In Progress - [ ] Skill 调用机制优化 - LLM 识别到 skill 后需要正确使用 skill 知识回答问题,而不是用 exec 工具查找 skill 目录 ### Blocked - (none) ## Key Decisions - **默认 Provider 使用 DeepSeek**: 用户明确要求,API key 已嵌入配置 - **Prompt-based tool calling**: gemma4:e4b 不支持原生 function calling,需要通过系统提示注入工具描述,LLM 输出 JSON 格式调用工具 - **Skill 信息注入系统提示**: 将可用 skills 的名称、描述、触发词加入系统提示,让 LLM 自主判断何时使用 - **Sandbox 工作目录改为 `.`**: 避免文件创建在 `/tmp/orca/sandbox` 隔离目录中 ## Next Steps 1. 修复 skill 调用机制 - LLM 应直接使用 skill 描述中的专业知识回答问题,而非用工具查找 skill 文件 2. 考虑将 skill 的 body/markdown 内容也注入到对话中,或作为上下文参考 3. 测试具体 skill 触发(如 ui-ux-pro-max 响应"设计网站"类请求) 4. 提交更改到 git dev 分支 5. 推送代码到远程仓库 (需要 GitHub 认证) ## Critical Context - `~/.agents/skills` 下有 8 个已加载 skills: dev-browser, find-skills, md2pdf, project-memory, shadcn, skill-creator, ui-ux-pro-max, weapp-tailwindcss-guide - 1 个 skill 加载错误: art-design-pro (缺少 frontmatter 中的 'name') - DeepSeek API key: `sk-2f1049148e06492dbc304ba49c81c321` (已嵌入默认配置) - 系统提示中 tools 和 skills 信息同时存在,LLM 可能混淆使用方式 - 当前测试中 LLM 用 exec 工具查找 skill 目录,说明 skill 调用指导不够明确 ## File Operations ### Read - `/Users/wang/agent_dev/orca.ai/cmd/orca/main.go` - `/Users/wang/agent_dev/orca.ai/internal/config/config.go` - `/Users/wang/agent_dev/orca.ai/internal/config/config_test.go` - `/Users/wang/agent_dev/orca.ai/pkg/actor/llm_agent.go` - `/Users/wang/agent_dev/orca.ai/pkg/kernel/kernel.go` - `/Users/wang/agent_dev/orca.ai/pkg/llm/deepseek.go` - `/Users/wang/agent_dev/orca.ai/pkg/llm/llm.go` - `/Users/wang/agent_dev/orca.ai/pkg/llm/types.go` - `/Users/wang/agent_dev/orca.ai/pkg/sandbox/process.go` - `/Users/wang/agent_dev/orca.ai/pkg/sandbox/sandbox.go` - `/Users/wang/agent_dev/orca.ai/pkg/skill/manager.go` - `/Users/wang/agent_dev/orca.ai/pkg/skill/skill.go` - `/Users/wang/agent_dev/orca.ai/pkg/tool/builtin.go` ### Modified - `/Users/wang/agent_dev/orca.ai/cmd/orca/main.go` - `/Users/wang/agent_dev/orca.ai/internal/config/config.go` - `/Users/wang/agent_dev/orca.ai/internal/config/config_test.go` - `/Users/wang/agent_dev/orca.ai/pkg/actor/llm_agent.go` - `/Users/wang/agent_dev/orca.ai/pkg/kernel/kernel.go` - `/Users/wang/agent_dev/orca.ai/pkg/llm/deepseek.go` - `/Users/wang/agent_dev/orca.ai/pkg/sandbox/process.go`