| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import os
- import click
- from llama_index.core.vector_stores.types import VectorStoreQuery
- from llama_index.embeddings.dashscope import (DashScopeEmbedding,
- DashScopeTextEmbeddingModels,
- DashScopeTextEmbeddingType)
- from llama_index.vector_stores.elasticsearch import (AsyncDenseVectorStrategy,
- ElasticsearchStore)
- # initialize qwen 7B model
- from modelscope import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
- es_vector_store = ElasticsearchStore(
- index_name='rag_index',
- es_url=os.getenv('ES_URL', 'http://127.0.0.1:9200'),
- es_user=os.getenv('ES_USER', 'elastic'),
- es_password=os.getenv('ES_PASSWORD', 'llama_index'),
- retrieval_strategy=AsyncDenseVectorStrategy(),
- )
- def embed_text(text):
- embedder = DashScopeEmbedding(
- model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2,
- text_type=DashScopeTextEmbeddingType.TEXT_TYPE_DOCUMENT,
- )
- return embedder.get_text_embedding(text)
- def search(vector_store: ElasticsearchStore, query: str):
- query_vec = VectorStoreQuery(query_embedding=embed_text(query))
- result = vector_store.query(query_vec)
- return '\n'.join([node.text for node in result.nodes])
- @click.command()
- @click.option(
- '-q',
- '--question',
- 'question',
- required=True,
- help='ask what you want to know!',
- )
- def cli(question):
- tokenizer = AutoTokenizer.from_pretrained('qwen/Qwen-7B-Chat',
- revision='v1.0.5',
- trust_remote_code=True)
- model = AutoModelForCausalLM.from_pretrained('qwen/Qwen-7B-Chat',
- revision='v1.0.5',
- device_map='auto',
- trust_remote_code=True,
- fp32=True).eval()
- model.generation_config = GenerationConfig.from_pretrained(
- 'Qwen/Qwen-7B-Chat', revision='v1.0.5', trust_remote_code=True)
- # define a prompt template for the vectorDB-enhanced LLM generation
- def answer_question(question, context, model):
- if context == '':
- prompt = question
- else:
- prompt = f'''请基于```内的内容回答问题。"
- ```
- {context}
- ```
- 我的问题是:{question}。
- '''
- history = None
- print(prompt)
- response, history = model.chat(tokenizer, prompt, history=None)
- return response
- answer = answer_question(question, search(es_vector_store, question),
- model)
- print(f'question: {question}\n'
- f'answer: {answer}')
- """
- python query.py -q 'how about the rights of men'
- """
- if __name__ == '__main__':
- cli()
|