chat with pennsieve
1.0.0
이것은 Zachary Ives 박사의지도하에 개발 된 연구 프로젝트 구성 요소입니다. 초기 목표는 Pennsieve 데이터베이스 위에 그래프 레이어를 개발하고 복잡하고 다재다능한 파일 형식에서 의료 데이터의 효과적인 데이터 추출을 통해 기계 학습을 활성화하는 것입니다. 이 구성 요소는 데이터베이스와 자연어 상호 작용을 가능하게합니다.
참고 : 모든 방법은 다른 저장소를 사용하여 NEO4J에 구축 된 기본 그래프에서 구현되었으며, 이는 공개되면 연결됩니다. 이 프로젝트는 상자에서 사용할 준비가되었지만, 기본 그래프가 채워지지 않으면 결과를 얻지 못할 것입니다.
__init__.py : 앱 패키지를 초기화합니다.config.py : 구성 및 환경 변수를 처리합니다.database.py : NEO4J 데이터베이스 연결을 관리합니다.setup_neo4j_graph() 는 .env 파일에 제공된 URL, 사용자 이름 및 비밀번호로 구성된 neo4j 그래프를 반환합니다.setup_neo4j_graph() Langchain neo4j 데이터베이스 래퍼를 반환합니다. 사용 된 중요한 방법 : query() 및 refresh_schema() . Langchain neo4jgraph 문서main.py : 응용 프로그램의 진입 점. qa_chain.py 에서 run_query(user_query: str) 호출하여 사용자 쿼리를 전달하고 결과를 검색하십시오. 그것은 모든 복잡성을 추상화하고 시스템과 상호 작용할 수있는 간단한 인터페이스를 제공합니다.dataguide.py : 데이터베이스에서 Dataguide 경로를 추출하여 Cypher 경로로 형식화합니다.extract_dataguide_paths(graph: Neo4jGraph) : Cypher 쿼리를 사용하여 루트에서 잎까지 데이터가이드 경로를 추출합니다.format_paths_for_llm(results: List[Dict[str, Any]]) : extract_dataguide_paths 에서 일치 쿼리를 위해 유효한 사이퍼 경로로의 형식.test.py : neo4j 그래프와의 연결을 테스트하고, 데이터 가이드 경로의 추출 및 포맷을 테스트합니다. 각 부품에 걸린 시간을 출력합니다.prompt_generator.py :이 모듈은 langchain 시스템 과 인간 프롬프트를 langchain.prompts.ChatPromptTemplate 에 생성하고 결합하는 일을 담당합니다. 프롬프트가 Langchain 프레임 워크에서 어떻게 구성되고 사용되는지 정의하기 때문에 프로젝트의 중요한 부분입니다.get_cypher_prompt_template() :이 메소드는이 파일에서 만든 ChatPromptTemplate 인스턴스를 반환합니다. qa_chain.py 의 GraphCypherQAChain 에서 사이퍼 쿼리를 생성하는 데 사용할 수있는 시스템과 인간 프롬프트를 단일 템플릿으로 결합합니다.input_variables 이며 프롬프트에 포함될 변수와 프롬프트의 텍스트를 정의하는 template 지정합니다.prompt 이며 시스템 메시지의 텍스트를 정의합니다.prompt 이며 인간 메시지의 텍스트를 정의합니다.from_messages() 이며 메시지 템플릿 목록을 가져 와서 채팅 프롬프트에 결합합니다.qa_chain.py : 모든 프로젝트 구성 요소를 통합하고 사용자 쿼리에서 GraphCypherQAChain 실행하는 run_query(user_query: str) 함수를 정의합니다.ChatOpenAI Azurechatopenai로 교체하십시오.__init__.py : 앱 패키지를 초기화합니다.generate_descriptions.py : 사이퍼 경로에 대한 LLM에서 설명을 생성하는 시스템 프롬프트를 정의합니다.generate_path_descriptions(all_paths: List[str]) : llm을 사용하여 주어진 경로에 대한 설명을 생성합니다. 설명 목록을 출력합니다.generate_embedding(path_description: str) : 개방형 임베딩 API를 사용하여 주어진 경로 설명에 대한 임베딩을 생성합니다.random_path_generator.py : 데이터베이스에서 랜덤 경로를 생성하고 사이퍼 경로로 포맷하는 메소드를 제공합니다.vectorDB_setup.py : Milvus 컨테이너를 시작하고 연결하고, 연결하고, 수집 스키마를 정의하고, 수집을 작성하고, 데이터를 삽입하고, 벡터 유사성 검색을 수행하는 메소드를 제공합니다.main.py :이 디렉토리의 모든 기능을 결합한 래퍼 기능. 예를 들어, get_similar_paths_from_milvus 는 app/qa_chain.py 에서 사용자 쿼리로 벡터 유사성 검색을 수행하는 데 사용됩니다.test.py : 다양한 기능을 테스트하는 방법. 현재 댓글을 달았습니다.write_read_data.py : API 통화에서 생성 된 사이퍼 경로 및 설명을 저장하는 간단한 쓰기 및 읽기 메소드.paths_vectorDB/main.py 의 메소드 fill_collection_with_random_paths 메소드는 API 호출에서 생성 된 경로와 설명을 data.txt 로 작성합니다.env.sample : 프로젝트 루트 디렉토리에서 이것의 사본을 만들어 .env 로 바꿉니다. 값을 채우십시오..gitignore : Git에 의해 무시할 파일 및 디렉토리를 지정합니다.README.md : 프로젝트 문서.docker-compose.yml : Milvus db의 Docker 파일. 새 버전이있는 경우이 파일을 교체하십시오. docker-compose.yml 이라는 이름이 지정되어 루트 디렉토리에 배치되었습니다.requirements.txt : Python Dependencies 및 개발에 사용되는 호환 버전. 참고 : requirements.txt 파일은 pipenv 통해 작성되었습니다. 이 프로젝트를 시작하는 것은 간단합니다. 아래 단계를 따라갈 수 있습니다.
저장소 복제 :
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_root참고 : 다음 단계를 진행하기 전에 프로젝트 루트 디렉토리에 있는지 확인하십시오.
종속성 설치 :
pip install -r requirements.txt환경 변수 설정 :
env.sample 복사하고 파일 이름을 .env 로 바꾸고 필요한 값을 채우십시오.NEO4J 데스크탑 설정 :
.env 파일을 업데이트하십시오. 기본값이 채워졌습니다.app/main.py 실행 :
app 디렉토리로 이동하여 main.py 실행하십시오. 원하는 사용자 쿼리가 run_query(user_query) 함수에 대한 인수로 전달되어 있는지 확인하십시오.docker-compose.yml 있는지 확인하십시오. App/Main.py를 실행하면 Milvus 컨테이너가 터미널 명령을 실행하여 자동으로 시작됩니다. 자세한 내용은 paths_vectorDB/vectorDB_setup.py 를 확인하십시오.volumes 라는 새 폴더를 다운로드하고 작성합니다. 폴더에는 milvus , minio 및 etcd 3 개의 하위 폴더가 포함되어 있습니다. 참고 : app/main.py 실행할 때 예상 출력을 더 설명하기 위해 예상 출력 이라는 폴더의 시스템에서 생성 된 2 개의 PDF의 출력을 첨부하고 있습니다.
first_output.pdf 라는 파일은 사용자가 기본값을 가진 새 세션에서 처음으로 app/main.py 실행할 때 예상되는 내용을 보여줍니다. (처음으로 실행하면 모든 것을 다운로드하는 데 시간이 걸릴 수 있습니다).regular_output.pdf 는 사용자가 기본값이있는 일반 세션에서 app/main.py 실행할 때 예상되는 내용을 보여줍니다. app 및 paths_vectorDB 의 프롬프트 향상은 LLM 성능을 크게 향상시킬 수 있습니다. 시스템 프롬프트의 고품질 사례는 경로에 대한 설명 생성 품질을 향상시킬 것임을 목격했습니다. 시스템 프롬프트는 또한 LLM의 최종 답변에 크게 영향을 미칩니다.search_similar_vectors paths_vectorDB/vectorDB_setup.py 내부의 "IP"(내부 제품)에서 Cosine으로 유사성 메트릭을 변경하십시오.app/main.py.