当前位置:   article > 正文

Mac os 本地搭建 Langchain 基础环境_mac langchain

mac langchain

一、本地所需环境安装

1.1 安装 python

查看本地 python 版本,命令台输入 python -V

建议升级 python 到 3.0 以上,如果已经安装了 Homebrew,直接通过命令brew install python3安装即可(注:该方法会比较慢,如一直在卡在Updating Homebrew...,按control + c 可仅仅取消Homebrew本次更新操作)

安装或更新完成后,控制台会打印出安装所在路径,copy 路径

把安装路径设置环境变量中,输入open ~/.bash_profile打开文件,把安装路径新增到文件中

新增 alias python="/usr/local/bin/python3"(注:路径为各自控制台输出安装路径) 完成后控制台执行保存 source ~/.bash_profile,再次执行python -V发现已经升级了本地 pytho 版本

1.2 安装 pip 包

查看本地 pip 版本,执行命令 pip -V

如果没有安装,执行命令python3 -m pip install --upgrade pip安装 pip 包

然后设置环境变量,执行open ~/.bash_profile,新增export HNSWLIB_NO_NATIVE=1,更新环境source ~/.bash_profile

1.3 安装 langchain&chroma db

直接使用 pip 安装,执行pip install langchain(注:安装比较慢,如遇下载超时情况,重新执行命令即可) 执行pip install chromadb(注:安装比较慢,如遇下载超时情况,重新执行命令即可)

1.4 安装其它环境

直接使用 pip 安装,一般执行pip install xxx,比如安装 openAI,pip install openai

1.5 执行 python 脚本

示例:输入命令pyhton3进入 python 中,依次输入以下命令

 

import chromadb(导包) chroma_client = chromadb.Client()(创建客户端) collection = chroma_client.create_collection(name="my_collection")(设置表名称) collection.add( documents=["This is a document", "This is another document"], metadatas=[{"source": "my_source"}, {"source": "my_source"}], ids=["id1", "id2"] )(执行插入) results = collection.query( query_texts=["This is a query document"], n_results=2 )(设置查询) print(results)(打印查询数据)

退出 python 执行 exit()


二、私有知识库 Demo

2.1 保存&查询并持久化到磁盘

  1. # 导包
  2. import chromadb
  3. from chromadb.config import Settings
  4. # 保存数据路径
  5. persist_directory = "/Users/baixiaobai/SHUIDI/shuidi/chroma_db"
  6. # 创建启用持久性的新 Chroma 客户端
  7. client = chromadb.Client(
  8. Settings(
  9. persist_directory=persist_directory,
  10. chroma_db_impl="duckdb+parquet",
  11. )
  12. )
  13. # 重置数据库
  14. client.reset()
  15. # 创建集合
  16. collection_name = "peristed_collection"
  17. collection = client.create_collection(name=collection_name)
  18. # 添加一些数据到集合中
  19. collection.add(
  20. embeddings=[
  21. [1.1, 2.3, 3.2],
  22. [4.5, 6.9, 4.4],
  23. [1.1, 2.3, 3.2],
  24. [4.5, 6.9, 4.4],
  25. [1.1, 2.3, 3.2],
  26. [4.5, 6.9, 4.4],
  27. [1.1, 2.3, 3.2],
  28. [4.5, 6.9, 4.4],
  29. ],
  30. metadatas=[
  31. {"uri": "img1.png", "style": "style1"},
  32. {"uri": "img2.png", "style": "style2"},
  33. {"uri": "img3.png", "style": "style1"},
  34. {"uri": "img4.png", "style": "style1"},
  35. {"uri": "img5.png", "style": "style1"},
  36. {"uri": "img6.png", "style": "style1"},
  37. {"uri": "img7.png", "style": "style1"},
  38. {"uri": "img8.png", "style": "style1"},
  39. ],
  40. documents=["doc1", "doc2", "doc3", "doc4", "doc5", "doc6", "doc7", "doc8"],
  41. ids=["id1", "id2", "id3", "id4", "id5", "id6", "id7", "id8"],
  42. )
  43. # 显示手动调用,保存数据到磁盘
  44. client.persist()
  45. # 使用相同的设置创建一个新客户端
  46. client = chromadb.Client(
  47. Settings(
  48. persist_directory=persist_directory,
  49. chroma_db_impl="duckdb+parquet",
  50. )
  51. )
  52. # 加载集合
  53. collection = client.get_collection(collection_name)
  54. # 查询集合
  55. results = collection.query(
  56. query_embeddings=[1.1, 2.2, 3.2],
  57. n_results=1,
  58. include=["embeddings", "documents", "metadatas", "distances"]
  59. )
  60. # 打印结果
  61. print(results)

2.2 利用 openai 进行 Embeddings 保存数据

  1. import chromadb
  2. from chromadb.utils import embedding_functions
  3. client = chromadb.Client()
  4. # Using OpenAI Embeddings. This assumes you have the openai package installed
  5. openai_ef = embedding_functions.OpenAIEmbeddingFunction(
  6. api_key="*********************************",
  7. model_name="text-embedding-ada-002"
  8. )
  9. openai_collection = client.create_collection(name="openai_embeddings", embedding_function=openai_ef)
  10. openai_collection.add(
  11. documents=["This is a document", "This is another document"],
  12. metadatas=[{"source": "my_source"}, {"source": "my_source"}],
  13. ids=["id1", "id2"]
  14. )
  15. results = openai_collection.query(
  16. query_texts=["This is a query document"],
  17. n_results=2,
  18. include=["embeddings", "documents", "metadatas", "distances"]
  19. )
  20. print(results)

2.3 利用 langchain 框架进行向量数据并查询

  1. from langchain.document_loaders import DirectoryLoader
  2. from langchain.text_splitter import CharacterTextSplitter
  3. from langchain.embeddings.openai import OpenAIEmbeddings
  4. from langchain.vectorstores import Chroma
  5. import os
  6. from langchain import PromptTemplate
  7. from langchain.output_parsers import CommaSeparatedListOutputParser
  8. from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate
  9. from langchain.llms import OpenAI
  10. from langchain.chat_models import ChatOpenAI
  11. from langchain.document_loaders import TextLoader
  12. # key
  13. OPENAI_API_KEY = '********'
  14. # 加载文件
  15. loader = TextLoader('/Users/baixiaobai/SHUIDI/shuidi/11.txt')
  16. documents = loader.load()
  17. # 按照句号切块数据
  18. text_splitter = CharacterTextSplitter(chunk_size=20, chunk_overlap=0, separator='。')
  19. split_docs = text_splitter.split_documents(documents)
  20. # 初始请求向量化数据
  21. embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)
  22. # 持久化文件地址
  23. persist_directory = 'chroma_storage'
  24. # 执行向量化
  25. vectorstore = Chroma.from_documents(split_docs, embeddings, persist_directory=persist_directory)
  26. # 持久化到本地
  27. vectorstore.persist()
  28. # 从本地加载数据
  29. vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
  30. query = "小黄今天干什么?"
  31. # 查询
  32. docs = vectordb.similarity_search(query,1)
  33. # 创建提示模板
  34. output_parser = CommaSeparatedListOutputParser()
  35. format_instructions = output_parser.get_format_instructions()
  36. prompt = PromptTemplate(
  37. template="已知信息:{background}。 根据上述已知信息,以客服的语气来回答用户的问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题” 或 “没有提供足够的相关信息”,不允许在答案中添加编造成分,答案请使用中文。 问题是:{question}",
  38. input_variables=["question"],
  39. partial_variables={"background": str(docs[0].page_content)}
  40. )
  41. # 初始化
  42. llm = OpenAI(temperature=0, openai_api_key=OPENAI_API_KEY)
  43. input = prompt.format(question="小黄明天干什么?")
  44. # 调用openai
  45. output = llm(input)
  46. print(output)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/129731
推荐阅读
相关标签
  

闽ICP备14008679号