Skip to content

Conversation

Copy link

Copilot AI commented Nov 14, 2025

Thanks for asking me to work on this. I will get started on it and keep this PR's description up to date as I form a plan and make progress.

Original prompt

目标:在仓库中新增一个名为 pocketflow_rag 的子包,提供基于 Milvus Lite、moka-ai/m3e-base embedding 和本地 OpenAI-兼容 LLM 的 RAG PoC 实现,便于在 PocketFlow 中编排使用。要求提交为一个 PR,包含实现文件、配置示例、依赖文件与设计文档。

变更内容(请在 PR 中创建下列文件,并将内容按说明实现):

  1. pocketflow_rag/init.py
  • 导出模块入口,列出 IngestManager, Document, M3EEmbedder, MilvusIndexer, Retriever, OpenAICompatibleClient, RAGPipeline
  1. pocketflow_rag/ingest.py
  • 提供 Document 类和 IngestManager,包含 parse_file(本地文本/markdown 支持)、chunk_document(支持基于 tokenizer 的 token 切分或 fallback 字符切分)、hash 计算
  1. pocketflow_rag/embedder.py
  • 使用 transformers+torch 加载模型 moka-ai/m3e-base,使用 mean pooling 实现 embed(texts: List[str]) -> List[List[float]],自动选择 cuda/cpu,batch 支持,输出 L2 归一化向量
  1. pocketflow_rag/indexer.py
  • 使用 pymilvus 连接 Milvus Lite(host/port 可配置),确保 collection 存在并创建(字段: pk VARCHAR 主键, embedding FLOAT_VECTOR, metadata VARCHAR JSON),创建 index(HNSW)并 load;实现 add(ids, embeddings, metadatas), delete(ids), search(embedding, top_k, metadata_filter)
  1. pocketflow_rag/retriever.py
  • 将 query embed 后调用 indexer.search,返回包含 id, score, metadata, text 的 candidate 列表(metadata 应包含原文或引用)
  1. pocketflow_rag/llm_client.py
  • 实现 OpenAICompatibleClient,调用本地 OpenAI-兼容服务的 /v1/chat/completions,支持 api_key header、timeout、stream 参数,并返回 JSON 响应
  1. pocketflow_rag/pipeline.py
  • 实现 RAGPipeline.answer(query, metadata_filter) 流程:retrieve -> 可选 reranker -> 构建 chat messages(system + user,插入 top_k snippet 并要求引用编号)-> 调用 llm_client.chat_completion -> 返回 answer 与 sources
  1. design/RAG_PocketFlow.md (Markdown 文档,包含设计概述、技术选型说明、部署与注意事项)

  2. config.example.yaml

  • 包含 embedding.model, embedding.device, milvus.host/port/collection_name/dimension/metric_type, llm.base_url/api_key/model/max_tokens/temperature, pipeline.top_k/final_k
  1. requirements-poc.txt
  • 最小 PoC 依赖:transformers, torch, pymilvus, requests

实现要点/约束:

  • 代码风格尽量保持仓库现有风格(若无法获取,使用明确且可运行的 Python 3.8+ 代码)
  • 新增文件应放在仓库根目录下(pocketflow_rag/ 和 design/)
  • 不修改现有关键代码或 CI 配置(除非必须),如需添加依赖仅新增 requirements-poc.txt,且在 PR 描述中明确说明
  • 提交 PR 时在说明中包含如何运行 PoC 的简短步骤(Milvus Lite 本地启动、如何 ingest 示例文档、如何调用 pipeline.answer)

测试与验收标准(PR 描述中需包含):

  • 新增文件能在本地安装 requirements-poc.txt 后按 README/PR 中的运行步骤完成:
    • 能连接本地 Milvus Lite(假设地址为 127.0.0.1:19530)
    • 使用 M3E embedder 对示例文本生成向量
    • 将向量写入 Milvus 并能检索到 top_k 结果
    • 使用本地 OpenAI-兼容 LLM 服务返回 chat completion 响应

不包含的内容:

  • 不在此 PR 中实现 PDF/HTML 解析器、cross-encoder reranker、生产化监控或 k8s 部署脚本;这些可以在后续 PR 中实现

请将 PR 标题设为:"feat(rag): add pocketflow_rag RAG PoC (Milvus + m3e + local-llm)"

如果需要基线分支请使用仓库默认分支(不指定 base_ref)。

注意:请确保 PR body 包含变更文件列表、简要说明,以及运行 PoC 的步骤(如何启动 Milvus Lite、如何运行简单 ingest/index/query 示例)。

This pull request was created as a result of the following prompt from Copilot chat.

目标:在仓库中新增一个名为 pocketflow_rag 的子包,提供基于 Milvus Lite、moka-ai/m3e-base embedding 和本地 OpenAI-兼容 LLM 的 RAG PoC 实现,便于在 PocketFlow 中编排使用。要求提交为一个 PR,包含实现文件、配置示例、依赖文件与设计文档。

变更内容(请在 PR 中创建下列文件,并将内容按说明实现):

  1. pocketflow_rag/init.py
  • 导出模块入口,列出 IngestManager, Document, M3EEmbedder, MilvusIndexer, Retriever, OpenAICompatibleClient, RAGPipeline
  1. pocketflow_rag/ingest.py
  • 提供 Document 类和 IngestManager,包含 parse_file(本地文本/markdown 支持)、chunk_document(支持基于 tokenizer 的 token 切分或 fallback 字符切分)、hash 计算
  1. pocketflow_rag/embedder.py
  • 使用 transformers+torch 加载模型 moka-ai/m3e-base,使用 mean pooling 实现 embed(texts: List[str]) -> List[List[float]],自动选择 cuda/cpu,batch 支持,输出 L2 归一化向量
  1. pocketflow_rag/indexer.py
  • 使用 pymilvus 连接 Milvus Lite(host/port 可配置),确保 collection 存在并创建(字段: pk VARCHAR 主键, embedding FLOAT_VECTOR, metadata VARCHAR JSON),创建 index(HNSW)并 load;实现 add(ids, embeddings, metadatas), delete(ids), search(embedding, top_k, metadata_filter)
  1. pocketflow_rag/retriever.py
  • 将 query embed 后调用 indexer.search,返回包含 id, score, metadata, text 的 candidate 列表(metadata 应包含原文或引用)
  1. pocketflow_rag/llm_client.py
  • 实现 OpenAICompatibleClient,调用本地 OpenAI-兼容服务的 /v1/chat/completions,支持 api_key header、timeout、stream 参数,并返回 JSON 响应
  1. pocketflow_rag/pipeline.py
  • 实现 RAGPipeline.answer(query, metadata_filter) 流程:retrieve -> 可选 reranker -> 构建 chat messages(system + user,插入 top_k snippet 并要求引用编号)-> 调用 llm_client.chat_completion -> 返回 answer 与 sources
  1. design/RAG_PocketFlow.md (Markdown 文档,包含设计概述、技术选型说明、部署与注意事项)

  2. config.example.yaml

  • 包含 embedding.model, embedding.device, milvus.host/port/collection_name/dimension/metric_type, llm.base_url/api_key/model/max_tokens/temperature, pipeline.top_k/final_k
  1. requirements-poc.txt
  • 最小 PoC 依赖:transformers, torch, pymilvus, requests

实现要点/约束:

  • 代码风格尽量保持仓库现有风格(若无法获取,使用明确且可运行的 Python 3.8+ 代码)
  • 新增文件应放在仓库根目录下(pocketflow_rag/ 和 design/)
  • 不修改现有关键代码或 CI 配置(除非必须),如需添加依赖仅新增 requirements-poc.txt,且在 PR 描述中明确说明
  • 提交 PR 时在说明中包含如何运行 PoC 的简短步骤(Milvus Lite 本地启动、如何 ingest 示例文档、如何调用 pipeline.answer)

测试与验收标准(PR 描述中需包含):

  • 新增文件能在本地安装 requirements-poc.txt 后按 README/PR 中的运行步骤完成:
    • 能连接本地 Milvus Lite(假设地址为 127.0.0.1:19530)
    • 使用 M3E embedder 对示例文本生成向量
    • 将向量写入 Milvus 并能检索到 top_k 结果
    • 使用本地 OpenAI-兼容 LLM 服务返回 chat completion 响应

不包含的内容:

  • 不在此 PR 中实现 PDF/HTML 解析器、cross-encoder reranker、生产化监控或 k8s 部署脚本;这些可以在后续 PR 中实现

请将 PR 标题设为:"feat(rag): add pocketflow_rag RAG PoC (Milvus + m3e + local-llm)"

如果需要基线分支请使用仓库默认分支(不指定 base_ref)。

注意:请确保 PR body 包含变更文件列表、简要说明,以及运行 PoC 的步骤(如何启动 Milvus Lite、如何运行简单 ingest/index/query 示例)。


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI self-assigned this Nov 14, 2025
Copilot stopped work on behalf of alexmaze due to an error November 14, 2025 11:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant