{"id":14921,"date":"2024-12-02T15:01:20","date_gmt":"2024-12-02T07:01:20","guid":{"rendered":"https:\/\/www.aisharenet.com\/?p=14921"},"modified":"2024-12-08T15:13:39","modified_gmt":"2024-12-08T07:13:39","slug":"aigongchengxueyuan26","status":"publish","type":"post","link":"https:\/\/www.kdjingpai.com\/ja\/aigongchengxueyuan26\/","title":{"rendered":"AI\u5de5\u7a0b\u5b66\u9662\uff1a2.6RAG \u53ef\u89c2\u5bdf\u6027- Arize Phoenix \u8bbe\u7f6e"},"content":{"rendered":"<p>\u6b22\u8fce\u6765\u5230\u672c\u7b14\u8bb0\u672c\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u5c06\u63a2\u7d22\u5982\u4f55\u4f7f\u7528 Llama Index \u8bbe\u7f6e\u548c\u89c2\u5bdf\u68c0\u7d22\u589e\u5f3a\u751f\u6210 (<a href=\"https:\/\/www.kdjingpai.com\/rag\/\">RAG<\/a>) \u6d41\u6c34\u7ebf\u3002<\/p>\n<p>https:\/\/github.com\/adithya-s-k\/AI-Engineering.academy\/tree\/main\/RAG\/01_RAG_Observability<\/p>\n<p>&nbsp;<\/p>\n<h2>\u7b80\u4ecb<\/h2>\n<p>\u672c\u6307\u5357\u63d0\u4f9b\u4e86\u914d\u7f6e\u6240\u9700\u5de5\u5177\u548c\u5e93\u7684\u5b8c\u6574\u6559\u7a0b\uff0c\u5305\u62ec\u5d4c\u5165\u6a21\u578b\u548c\u5411\u91cf\u5b58\u50a8\u7d22\u5f15\uff0c\u4ee5\u5b9e\u73b0\u9ad8\u6548\u7684\u6587\u6863\u68c0\u7d22\u548c\u67e5\u8be2\u5904\u7406\u3002\u6211\u4eec\u5c06\u6db5\u76d6\u4ece\u5b89\u88c5\u4e0e\u8bbe\u7f6e\u5230\u67e5\u8be2\u548c\u68c0\u7d22\u76f8\u5173\u4fe1\u606f\u7684\u6240\u6709\u5185\u5bb9\uff0c\u5e2e\u52a9\u60a8\u638c\u63e1 RAG \u6d41\u6c34\u7ebf\u7684\u9ad8\u7ea7\u641c\u7d22\u80fd\u529b\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u5165\u95e8<\/h2>\n<p>\u8981\u5f00\u59cb\u4f7f\u7528\u672c\u7b14\u8bb0\u672c\uff0c\u60a8\u9700\u8981\u5bf9 Python \u6709\u57fa\u672c\u4e86\u89e3\uff0c\u5e76\u5bf9\u673a\u5668\u5b66\u4e60\u6982\u5ff5\u6709\u6240\u719f\u6089\u3002\u5982\u679c\u60a8\u5bf9\u8fd9\u4e9b\u6982\u5ff5\u8fd8\u4e0d\u719f\u6089\uff0c\u4e0d\u7528\u62c5\u5fc3\u2014\u2014\u6211\u4eec\u5c06\u4e00\u6b65\u6b65\u5f15\u5bfc\u60a8\u5b8c\u6210\uff01<\/p>\n<h3>\u524d\u7f6e\u6761\u4ef6<\/h3>\n<ul>\n<li>Python 3.7+<\/li>\n<li>Jupyter Notebook \u6216 JupyterLab<\/li>\n<li>Python \u548c\u673a\u5668\u5b66\u4e60\u6982\u5ff5\u7684\u57fa\u7840\u77e5\u8bc6<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>1. \u8bbe\u7f6e<\/h2>\n<h3>1.1 \u5b89\u88c5\u5fc5\u8981\u7684\u8f6f\u4ef6\u5305<\/h3>\n<p>\u8981\u5f00\u59cb\u8bbe\u7f6e Arize Phoenix\uff0c\u60a8\u9700\u8981\u5b89\u88c5\u5fc5\u8981\u7684\u8f6f\u4ef6\u5305\u3002<\/p>\n<p>Arize Phoenix \u662f\u4e00\u4e2a\u4e13\u4e3a\u673a\u5668\u5b66\u4e60\u548c AI \u7cfb\u7edf\u7684\u53ef\u89c2\u5bdf\u6027\u548c\u76d1\u63a7\u8bbe\u8ba1\u7684\u7efc\u5408\u5de5\u5177\u3002\u5b83\u63d0\u4f9b\u4e86\u8ddf\u8e2a\u548c\u5206\u6790\u673a\u5668\u5b66\u4e60\u6a21\u578b\u53ca\u6570\u636e\u6d41\u6c34\u7ebf\u5404\u4e2a\u65b9\u9762\u7684\u529f\u80fd\u3002<\/p>\n<pre><code>!pip install arize-phoenix\r\n!pip install openinference-instrumentation-openai\r\n<\/code><\/pre>\n<p>\u8fd9\u4e9b\u547d\u4ee4\u5c06\u5b89\u88c5\uff1a<\/p>\n<ul>\n<li><code>arize-phoenix<\/code>\uff1a\u7528\u4e8e\u673a\u5668\u5b66\u4e60\u5de5\u4f5c\u6d41\u53ef\u89c2\u5bdf\u6027\u7684\u5de5\u5177\u3002<\/li>\n<li><code>openinference-instrumentation-openai<\/code>\uff1a\u7528\u4e8e\u5c06 OpenAI \u6a21\u578b\u4e0e Arize Phoenix \u7b49\u53ef\u89c2\u5bdf\u6027\u5de5\u5177\u96c6\u6210\u7684\u5305\u3002<\/li>\n<\/ul>\n<h3>1.2 \u8bbe\u7f6e Arize Phoenix<\/h3>\n<p>\u6709\u4ee5\u4e0b\u4e09\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5b8c\u6210\u8bbe\u7f6e\uff1a<\/p>\n<p>\u8bf7\u9605\u8bfb\u66f4\u591a\u00a0<a href=\"https:\/\/docs.arize.com\/phoenix\/quickstart\">\u8fd9\u91cc\u3002<\/a><\/p>\n<ul>\n<li>\u547d\u4ee4\u884c\n<pre><code>python3 -m phoenix.server.main serve\r\n<\/code><\/pre>\n<\/li>\n<li>Docker\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8 phoenix \u7684 docker \u955c\u50cf\uff1a\n<pre><code>docker run -p 6006:6006 -p 4317:4317 arizephoenix\/phoenix:latest\r\n<\/code><\/pre>\n<p>\u8fd9\u5c06\u628a Phoenix \u7684 UI \u548c REST API \u66b4\u9732\u5728 localhost:6006\uff0c\u5e76\u5c06 gRPC \u7aef\u70b9\u7528\u4e8e spans \u7684\u66b4\u9732\u5728 localhost:4317\u3002<\/li>\n<li>\u7b14\u8bb0\u672c\n<pre><code>import phoenix as px\r\npx.launch_app()\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>1.3 \u5bfc\u5165\u5fc5\u8981\u7684\u5e93\u5e76\u914d\u7f6e\u73af\u5883<\/h3>\n<p>\u5728\u8fdb\u884c\u6570\u636e\u5904\u7406\u548c\u8bc4\u4f30\u4e4b\u524d\uff0c\u8bf7\u5bfc\u5165\u5fc5\u8981\u7684\u5e93\u5e76\u8bbe\u7f6e\u73af\u5883\uff1a<\/p>\n<pre><code>import json\r\nimport os\r\nfrom getpass import getpass\r\nimport nest_asyncio\r\nimport pandas as pd\r\nfrom tqdm import tqdm\r\nimport phoenix as px\r\n# \u5141\u8bb8\u5728\u7b14\u8bb0\u672c\u73af\u5883\u4e2d\u8fdb\u884c\u5e76\u53d1\u8bc4\u4f30\r\nnest_asyncio.apply()\r\n# \u8bbe\u7f6e pandas DataFrame \u7684\u663e\u793a\u9009\u9879\u4ee5\u5c55\u793a\u66f4\u591a\u5185\u5bb9\r\npd.set_option(\"display.max_colwidth\", 1000)\r\n<\/code><\/pre>\n<ul>\n<li><code>json<\/code>,\u00a0<code>os<\/code>\uff1a\u7528\u4e8e\u5904\u7406 JSON \u6570\u636e\u548c\u64cd\u4f5c\u7cfb\u7edf\u4ea4\u4e92\u7684\u6807\u51c6 Python \u5e93\u3002<\/li>\n<li><code>getpass<\/code>\uff1a\u4e00\u4e2a\u7528\u4e8e\u5b89\u5168\u8f93\u5165\u5bc6\u7801\u7684\u5de5\u5177\u3002<\/li>\n<li><code>nest_asyncio<\/code>\uff1a\u5141\u8bb8\u5728 Jupyter \u7b14\u8bb0\u672c\u4e2d\u4f7f\u7528 asyncio\u3002<\/li>\n<li><code>pandas<\/code>\u00a0(<code>pd<\/code>)\uff1a\u4e00\u4e2a\u5f3a\u5927\u7684 Python \u6570\u636e\u64cd\u4f5c\u5e93\u3002<\/li>\n<li><code>tqdm<\/code>\uff1a\u4e3a\u5faa\u73af\u63d0\u4f9b\u8fdb\u5ea6\u6761\uff0c\u7528\u4e8e\u8ddf\u8e2a\u6570\u636e\u5904\u7406\u8fdb\u5ea6\u3002<\/li>\n<li><code>phoenix<\/code>\u00a0(<code>px<\/code>)\uff1aArize \u53ef\u89c2\u5bdf\u6027\u5de5\u5177\u7684\u4e00\u90e8\u5206\uff0c\u63d0\u4f9b\u4ea4\u4e92\u5f0f UI \u7528\u4e8e\u63a2\u7d22\u6570\u636e\u548c\u76d1\u63a7\u673a\u5668\u5b66\u4e60\u6a21\u578b\u3002<\/li>\n<\/ul>\n<p>\u914d\u7f6e\u00a0<code>nest_asyncio<\/code>\u00a0\u4ee5\u5141\u8bb8\u5728\u7b14\u8bb0\u672c\u73af\u5883\u4e2d\u8fdb\u884c\u5e76\u53d1\u8bc4\u4f30\uff0c\u5e76\u8bbe\u7f6e pandas DataFrame \u7684\u6700\u5927\u5217\u5bbd\u4ee5\u63d0\u9ad8\u53ef\u8bfb\u6027\u3002<\/p>\n<h3>1.4 \u542f\u52a8 Phoenix \u5e94\u7528\u7a0b\u5e8f<\/h3>\n<pre><code>px.launch_app()\r\n<\/code><\/pre>\n<p>\u6b64\u51fd\u6570\u521d\u59cb\u5316\u5e76\u542f\u52a8 Phoenix \u5e94\u7528\u7a0b\u5e8f\uff0c\u5b83\u5c06\u5728\u9ed8\u8ba4\u6d4f\u89c8\u5668\u7684\u65b0\u6807\u7b7e\u9875\u4e2d\u6253\u5f00\uff0c\u4e3a\u63a2\u7d22\u6570\u636e\u96c6\u3001\u53ef\u89c6\u5316\u6a21\u578b\u6027\u80fd\u548c\u8c03\u8bd5\u63d0\u4f9b\u4ea4\u4e92\u5f0f\u754c\u9762\u3002<\/p>\n<h3>1.5 \u67e5\u770b Phoenix \u5e94\u7528\u7a0b\u5e8f\u4f1a\u8bdd<\/h3>\n<p>\u4e00\u65e6 Phoenix \u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u540e\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4f1a\u8bdd\u5bf9\u8c61\u76f4\u63a5\u5728\u7b14\u8bb0\u672c\u4e2d\u4e0e\u5e94\u7528\u7a0b\u5e8f\u4ea4\u4e92\u3002\u8fd0\u884c\u4ee5\u4e0b\u4ee3\u7801\u4ee5\u542f\u52a8 Phoenix \u5e94\u7528\u7a0b\u5e8f\u5e76\u5728\u5f53\u524d\u4f1a\u8bdd\u4e2d\u67e5\u770b\uff1a<\/p>\n<pre><code># \u542f\u52a8\u5e76\u67e5\u770b Phoenix \u5e94\u7528\u4f1a\u8bdd\r\n(session := px.launch_app()).view()\r\n<\/code><\/pre>\n<p>\u8fd9\u884c\u4ee3\u7801\u542f\u52a8 Phoenix \u5e94\u7528\u7a0b\u5e8f\u5e76\u5c06\u4f1a\u8bdd\u5206\u914d\u7ed9\u540d\u4e3a session \u7684\u53d8\u91cf\uff0c\u4f7f\u7528\u00a0<code>view()<\/code>\u00a0\u65b9\u6cd5\u53ef\u4ee5\u76f4\u63a5\u5728\u7b14\u8bb0\u672c\u754c\u9762\u4e2d\u663e\u793a Phoenix \u5e94\u7528\u7a0b\u5e8f\uff0c\u4e3a\u60a8\u63d0\u4f9b\u65e0\u9700\u5728\u6d4f\u89c8\u5668\u548c\u7b14\u8bb0\u672c\u4e4b\u95f4\u5207\u6362\u7684\u96c6\u6210\u4f53\u9a8c\u3002<\/p>\n<h3>1.6 \u8bbe\u7f6e\u8ffd\u8e2a\u7684\u7aef\u70b9<\/h3>\n<p>\u8981\u5c06\u8ffd\u8e2a\u6570\u636e\u53d1\u9001\u5230 Phoenix \u5e94\u7528\u7a0b\u5e8f\u4ee5\u8fdb\u884c\u5206\u6790\u548c\u53ef\u89c2\u5bdf\u6027\uff0c\u8bf7\u5b9a\u4e49 Phoenix \u5e94\u7528\u7a0b\u5e8f\u76d1\u542c\u4f20\u5165\u6570\u636e\u7684\u7aef\u70b9 URL\u3002<\/p>\n<pre><code>endpoint = \"http:\/\/127.0.0.1:6006\/v1\/traces\"\r\n<\/code><\/pre>\n<p><code>endpoint<\/code>\u00a0\u53d8\u91cf\u5b58\u50a8 Phoenix \u5e94\u7528\u7a0b\u5e8f\u7528\u4e8e\u76d1\u542c\u4f20\u5165\u8ffd\u8e2a\u6570\u636e\u7684\u7aef\u70b9 URL\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>2. \u8ffd\u8e2a OpenAI<\/h2>\n<p>\u66f4\u591a\u96c6\u6210\uff0c\u00a0<a href=\"https:\/\/docs.arize.com\/phoenix\/tracing\/integrations-tracing\">\u9605\u8bfb\u3002<\/a><\/p>\n<h3>2.1 \u5b89\u88c5\u5e76\u5bfc\u5165 OpenAI \u5305<\/h3>\n<pre><code>!pip install openai\r\nimport openai\r\n<\/code><\/pre>\n<p><code>openai<\/code>\uff1aOpenAI API \u7684 Python \u5ba2\u6237\u7aef\u5e93\u3002\u5b83\u5141\u8bb8\u60a8\u5411 OpenAI \u7684\u6a21\u578b\uff08\u5305\u62ec GPT-3 \u548c GPT-4\uff09\u53d1\u9001\u8bf7\u6c42\u4ee5\u5b8c\u6210\u5404\u79cd\u4efb\u52a1\u3002<\/p>\n<h3>2.2 \u914d\u7f6e OpenAI API \u5bc6\u94a5<\/h3>\n<pre><code>import openai\r\nimport os\r\nfrom getpass import getpass\r\n# \u4ece\u73af\u5883\u53d8\u91cf\u4e2d\u83b7\u53d6 API \u5bc6\u94a5\uff0c\u82e5\u672a\u8bbe\u7f6e\u5219\u63d0\u793a\u7528\u6237\u8f93\u5165\r\nif not (openai_api_key := os.getenv(\"OPENAI_API_KEY\")):\r\nopenai_api_key = getpass(\"\ud83d\udd11 \u8f93\u5165\u60a8\u7684 OpenAI API \u5bc6\u94a5\uff1a\")\r\n# \u4e3a OpenAI \u5ba2\u6237\u7aef\u8bbe\u7f6e API \u5bc6\u94a5\r\nopenai.api_key = openai_api_key\r\n# \u5c06 API \u5bc6\u94a5\u5b58\u50a8\u5230\u73af\u5883\u53d8\u91cf\u4e2d\u4ee5\u4f9b\u540e\u7eed\u4f7f\u7528\r\nos.environ[\"OPENAI_API_KEY\"] = openai_api_key\r\n<\/code><\/pre>\n<ul>\n<li>\u83b7\u53d6 API \u5bc6\u94a5\uff1a\u4ee3\u7801\u9996\u5148\u5c1d\u8bd5\u4ece\u73af\u5883\u53d8\u91cf\uff08OPENAI_API_KEY\uff09\u4e2d\u83b7\u53d6 API \u5bc6\u94a5\u3002\u5982\u679c\u672a\u627e\u5230\u5bc6\u94a5\uff0c\u5219\u63d0\u793a\u7528\u6237\u901a\u8fc7 getpass \u5b89\u5168\u8f93\u5165\u3002<\/li>\n<li>\u8bbe\u7f6e API \u5bc6\u94a5\uff1a\u68c0\u7d22\u6216\u63d0\u4f9b\u7684 API \u5bc6\u94a5\u968f\u540e\u4f1a\u88ab\u8bbe\u7f6e\u4e3a OpenAI \u5ba2\u6237\u7aef\u5e93\u7684\u5bc6\u94a5\u3002<\/li>\n<li>\u5b58\u50a8 API \u5bc6\u94a5\uff1a\u6700\u540e\u5c06 API \u5bc6\u94a5\u5b58\u50a8\u5230\u73af\u5883\u53d8\u91cf\u4e2d\uff0c\u4ee5\u786e\u4fdd\u5728\u4f1a\u8bdd\u4e2d\u53ef\u4ee5\u968f\u65f6\u4f7f\u7528\u3002<\/li>\n<\/ul>\n<h3>2.3 \u8bbe\u7f6e OpenTelemetry \u4ee5\u8fdb\u884c\u8ffd\u8e2a<\/h3>\n<p>\u4e3a\u4e86\u4e3a\u4f60\u7684 OpenAI \u4ea4\u4e92\u542f\u7528\u8ffd\u8e2a\uff0c\u8bf7\u914d\u7f6e OpenTelemetry \u5e76\u8bbe\u7f6e\u6240\u9700\u7684\u7ec4\u4ef6\u3002<\/p>\n<pre><code>from opentelemetry import trace as trace_api\r\nfrom opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter\r\nfrom opentelemetry.sdk import trace as trace_sdk\r\nfrom opentelemetry.sdk.trace.export import SimpleSpanProcessor\r\n# \u8bbe\u7f6e Tracer \u63d0\u4f9b\u7a0b\u5e8f\r\ntracer_provider = trace_sdk.TracerProvider()\r\n# \u5b9a\u4e49\u5e26\u6709\u7aef\u70b9\u7684 OTLP Span \u5bfc\u51fa\u5668\r\nspan_exporter = OTLPSpanExporter(endpoint)\r\n# \u8bbe\u7f6e Span Processor \u4ee5\u5904\u7406\u548c\u5bfc\u51fa spans\r\nspan_processor = SimpleSpanProcessor(span_exporter)\r\n# \u5c06 Span Processor \u6dfb\u52a0\u5230 Tracer \u63d0\u4f9b\u7a0b\u5e8f\r\ntracer_provider.add_span_processor(span_processor)\r\n# \u8bbe\u7f6e\u5168\u5c40 Tracer \u63d0\u4f9b\u7a0b\u5e8f\r\ntrace_api.set_tracer_provider(tracer_provider)\r\n<\/code><\/pre>\n<p><strong>OpenTelemetry \u5e93<\/strong><\/p>\n<p>\u5728\u63d0\u4f9b\u7684\u4ee3\u7801\u4e2d\uff0c\u4f7f\u7528\u4e86\u591a\u4e2a OpenTelemetry \u5e93\u6765\u8bbe\u7f6e\u8ffd\u8e2a\u3002\u4ee5\u4e0b\u662f\u6bcf\u4e2a\u5e93\u7684\u6982\u8ff0\uff1a<\/p>\n<ul>\n<li><code>opentelemetry<\/code>:<strong>\u4f5c\u7528<\/strong>\uff1aOpenTelemetry \u7684\u6838\u5fc3\u5e93\uff0c\u63d0\u4f9b\u7528\u4e8e\u8ffd\u8e2a\u548c\u6307\u6807\u7684 API\u3002<strong>\u7528\u6cd5<\/strong>\uff1a\u5305\u62ec trace \u6a21\u5757\uff0c\u7528\u4e8e\u521b\u5efa\u548c\u7ba1\u7406\u8ffd\u8e2a\u3002<\/li>\n<li><code>opentelemetry.exporter.otlp.proto.http.trace_exporter<\/code>:<strong>\u4f5c\u7528<\/strong>\uff1a\u63d0\u4f9b\u901a\u8fc7 HTTP \u4f7f\u7528 OTLP\uff08OpenTelemetry \u534f\u8bae\uff09\u7684\u8ffd\u8e2a\u5bfc\u51fa\u5668\u3002<strong>\u7528\u6cd5<\/strong>\uff1a\u8be5\u6a21\u5757\u4e2d\u7684\u00a0<code>OTLPSpanExporter<\/code>\u00a0\u7c7b\u7528\u4e8e\u5c06\u8ffd\u8e2a\u6570\u636e\u53d1\u9001\u5230\u4e0e OTLP \u517c\u5bb9\u7684\u540e\u7aef\uff0c\u5e76\u901a\u8fc7\u8bbe\u7f6e\u7aef\u70b9\u8fdb\u884c\u914d\u7f6e\u3002<\/li>\n<li><code>opentelemetry.sdk.trace<\/code>:<strong>\u4f5c\u7528<\/strong>\uff1a\u5305\u542b\u7528\u4e8e\u8ffd\u8e2a\u7684 SDK \u5b9e\u73b0\uff0c\u5305\u62ec\u00a0<code>TracerProvider<\/code>\u3002<strong>\u7528\u6cd5<\/strong>\uff1a\n<ul>\n<li><code>TracerProvider<\/code>\uff1a\u7ba1\u7406 Tracer \u5b9e\u4f8b\uff0c\u5e76\u8d1f\u8d23\u5bfc\u51fa\u5728\u8ffd\u8e2a\u4e2d\u6536\u96c6\u7684 spans\uff08\u5de5\u4f5c\u5355\u5143\uff09\u3002<\/li>\n<li><code>SimpleSpanProcessor<\/code>\uff1a\u4e00\u79cd\u540c\u6b65\u5bfc\u51fa spans \u7684\u5904\u7406\u5668\uff0c\u7528\u4e8e\u5904\u7406\u548c\u53d1\u9001\u6570\u636e\u5230\u5bfc\u51fa\u5668\u3002<\/li>\n<\/ul>\n<\/li>\n<li><code>opentelemetry.sdk.trace.export<\/code>:<strong>\u4f5c\u7528<\/strong>\uff1a\u63d0\u4f9b\u7528\u4e8e\u5bfc\u51fa\u8ffd\u8e2a\u6570\u636e\u7684\u7c7b\u3002<strong>\u7528\u6cd5<\/strong>\uff1a\n<ul>\n<li><code>SimpleSpanProcessor<\/code>\uff1a\u5904\u7406 spans \u5e76\u4f7f\u7528\u6307\u5b9a\u7684\u5bfc\u51fa\u5668\u8fdb\u884c\u5bfc\u51fa\uff0c\u786e\u4fdd\u6570\u636e\u53d1\u9001\u5230\u540e\u7aef\u4ee5\u8fdb\u884c\u5206\u6790\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>2.4 \u4f7f\u7528 OpenInference \u5bf9 OpenAI \u8fdb\u884c Instrumentation<\/h3>\n<p>\u4e3a\u4e86\u5c06 OpenTelemetry \u96c6\u6210\u5230 OpenAI \u4e2d\uff0c\u5e76\u4e3a OpenAI \u6a21\u578b\u4ea4\u4e92\u542f\u7528\u8ffd\u8e2a\uff0c\u8bf7\u4f7f\u7528\u6765\u81ea\u00a0<code>openinference<\/code>\u00a0\u5e93\u7684\u00a0<code>OpenAIInstrumentor<\/code>\u3002<\/p>\n<pre><code>from openinference.instrumentation.openai import OpenAIInstrumentor\r\n# \u5b9e\u4f8b\u5316\u5e76\u4e3a OpenAI \u5e94\u7528 instrumentation\r\nOpenAIInstrumentor().instrument()\r\n<\/code><\/pre>\n<ul>\n<li><code>OpenAIInstrumentor<\/code>\uff1a\u6765\u81ea\u00a0<code>openinference<\/code>\u00a0\u5e93\u7684\u7c7b\uff0c\u7528\u4e8e\u5bf9 OpenAI \u7684 API \u8c03\u7528\u8fdb\u884c instrumentation\uff0c\u4ece\u800c\u5b9e\u73b0\u8ffd\u8e2a\u548c\u53ef\u89c2\u6d4b\u6027\u3002<\/li>\n<li><code>instrument()<\/code>\uff1a\u6b64\u65b9\u6cd5\u914d\u7f6e OpenAI API \u5ba2\u6237\u7aef\u4ee5\u81ea\u52a8\u751f\u6210\u5e76\u53d1\u9001\u8ffd\u8e2a\u6570\u636e\u5230 OpenTelemetry \u540e\u7aef\u3002\u5b83\u96c6\u6210\u4e86\u5df2\u914d\u7f6e\u7684\u8ffd\u8e2a\u8bbe\u7f6e\uff0c\u4f7f\u4f60\u80fd\u591f\u76d1\u63a7\u548c\u5206\u6790\u4e0e OpenAI \u6a21\u578b\u4ea4\u4e92\u7684\u8fc7\u7a0b\u3002<\/li>\n<\/ul>\n<p>\u901a\u8fc7\u8fd0\u884c\u6b64\u4ee3\u7801\uff0c\u4f60\u53ef\u4ee5\u786e\u4fdd\u6240\u6709 OpenAI API \u8c03\u7528\u90fd\u88ab\u8ffd\u8e2a\uff0c\u4ece\u800c\u6355\u83b7\u5173\u4e8e\u6a21\u578b\u4f7f\u7528\u60c5\u51b5\u548c\u6027\u80fd\u7684\u8be6\u7ec6\u89c1\u89e3\u3002<\/p>\n<h3>2.5 \u5411 OpenAI API \u53d1\u8d77\u8bf7\u6c42<\/h3>\n<p>\u4e3a\u4e86\u4e0e OpenAI \u7684 API \u4ea4\u4e92\u5e76\u83b7\u53d6\u54cd\u5e94\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u4ee3\u7801\u3002\u6b64\u793a\u4f8b\u5c55\u793a\u5982\u4f55\u901a\u8fc7 OpenAI API \u521b\u5efa\u4e00\u4e2a\u804a\u5929\u8865\u5168\u8bf7\u6c42\u5e76\u6253\u5370\u7ed3\u679c\uff1a<\/p>\n<pre><code>import openai\r\n# \u521b\u5efa OpenAI \u5ba2\u6237\u7aef\u5b9e\u4f8b\r\nclient = openai.OpenAI()\r\n# \u5411 OpenAI API \u53d1\u8d77\u804a\u5929\u8865\u5168\u8bf7\u6c42\r\nresponse = client.chat.completions.create(\r\nmodel=\"gpt-4o\",\r\nmessages=[{\"role\": \"user\", \"content\": \"Write a haiku.\"}],\r\n)\r\n# \u6253\u5370\u54cd\u5e94\u5185\u5bb9\r\nprint(response.choices[0].message.content)\r\n<\/code><\/pre>\n<ul>\n<li><code>openai.OpenAI()<\/code>: \u521d\u59cb\u5316 OpenAI \u5ba2\u6237\u7aef\u5b9e\u4f8b\uff0c\u53ef\u7528\u4e8e\u4e0e OpenAI API \u4ea4\u4e92\u3002<\/li>\n<li><code>client.chat.completions.create()<\/code>: \u5411 OpenAI API \u53d1\u9001\u8bf7\u6c42\u4ee5\u521b\u5efa\u804a\u5929\u8865\u5168\u3002\n<ul>\n<li><code>model=\"gpt-4o\"<\/code>: \u6307\u5b9a\u7528\u4e8e\u751f\u6210\u8865\u5168\u7684\u6a21\u578b\u540d\u79f0\u3002\u786e\u4fdd\u6a21\u578b\u540d\u79f0\u6b63\u786e\u5e76\u4e14\u4f60\u5df2\u5728 OpenAI API \u8d26\u6237\u4e2d\u542f\u7528\u3002<\/li>\n<li><code>messages<\/code>: \u5305\u62ec\u5bf9\u8bdd\u5386\u53f2\u7684\u6d88\u606f\u5217\u8868\u3002\u672c\u793a\u4f8b\u5305\u542b\u7528\u6237\u53d1\u9001\u7684\u5355\u4e2a\u6d88\u606f\u8bf7\u6c42\uff1a\u201cWrite a haiku\u3002\u201d<\/li>\n<\/ul>\n<\/li>\n<li><code>response.choices[0].message.content<\/code>: \u63d0\u53d6\u5e76\u6253\u5370\u6a21\u578b\u751f\u6210\u7684\u8865\u5168\u5185\u5bb9\u3002<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>3. \u8ffd\u8e2a Llama index<\/h2>\n<h3>3.1 \u5b89\u88c5\u548c\u5bfc\u5165\u6240\u9700\u7684\u5e93<\/h3>\n<pre><code>!pip install llama-index\r\n!pip install llama-index-core\r\n!pip install llama-index-llms-openai\r\n!pip install openinference-instrumentation-llama-index==2.2.4\r\n!pip install -U llama-index-callbacks-arize-phoenix\r\n!pip install \"arize-phoenix[llama-index]\"\r\n<\/code><\/pre>\n<ul>\n<li><code>llama-index<\/code>: Llama Index \u529f\u80fd\u7684\u6838\u5fc3\u5305\u3002<\/li>\n<li><code>llama-index-core<\/code>: \u63d0\u4f9b Llama Index \u7684\u6838\u5fc3\u529f\u80fd\u548c\u5de5\u5177\u3002<\/li>\n<li><code>llama-index-llms-openai<\/code>: \u7528\u4e8e\u5c06 Llama Index \u548c OpenAI \u6a21\u578b\u96c6\u6210\u7684\u5305\u3002<\/li>\n<li><code>openinference-instrumentation-llama-index==2.2.4<\/code>: \u63d0\u4f9b\u5bf9 Llama Index \u4ea4\u4e92\u8fdb\u884c instrumentation \u7684\u5de5\u5177\u3002<\/li>\n<li><code>llama-index-callbacks-arize-phoenix<\/code>: \u63d0\u4f9b\u4e0e Arize Phoenix \u56de\u8c03\u96c6\u6210\u3002<\/li>\n<li><code>arize-phoenix[llama-index]<\/code>: \u6269\u5c55 Arize Phoenix \u4ee5\u652f\u6301 Llama Index \u8ffd\u8e2a\u3002<\/li>\n<\/ul>\n<h3>3.2 \u83b7\u53d6\u5f53\u524d\u6d3b\u52a8 Phoenix \u4f1a\u8bdd\u7684 URL<\/h3>\n<pre><code># \u83b7\u53d6\u5f53\u524d\u6d3b\u52a8\u7684 Phoenix \u4f1a\u8bdd\u7684 URL\r\npx.active_session().url\r\n<\/code><\/pre>\n<p>\u8bbf\u95ee\u5f53\u524d\u6d3b\u52a8\u7684 Phoenix \u4f1a\u8bdd\uff0c\u68c0\u7d22\u5176 URL\uff0c\u4ece\u800c\u67e5\u770b\u6216\u5171\u4eab\u7528\u4e8e\u76d1\u63a7\u548c\u5206\u6790\u8ffd\u8e2a\u6570\u636e\u7684 Phoenix \u754c\u9762\u3002<\/p>\n<h3>3.3 \u8bbe\u7f6e Llama Index \u7684\u8ffd\u8e2a<\/h3>\n<p>\u8981\u4e3a Llama Index \u8bbe\u7f6e OpenTelemetry \u8ffd\u8e2a\uff0c\u8bf7\u914d\u7f6e Tracer \u63d0\u4f9b\u7a0b\u5e8f\u5e76\u96c6\u6210 Llama Index Instrumentor\u3002<\/p>\n<pre><code>from openinference.instrumentation.llama_index import LlamaIndexInstrumentor\r\nfrom opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter\r\nfrom opentelemetry.sdk import trace as trace_sdk\r\nfrom opentelemetry.sdk.trace.export import SimpleSpanProcessor\r\n# \u8bbe\u7f6e Tracer \u63d0\u4f9b\u7a0b\u5e8f\r\ntracer_provider = trace_sdk.TracerProvider()\r\n# \u6dfb\u52a0 Span Processor \u5230 Tracer \u63d0\u4f9b\u7a0b\u5e8f\r\ntracer_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))\r\n# \u4f7f\u7528 Tracer \u63d0\u4f9b\u7a0b\u5e8f \u5bf9 Llama Index \u8fdb\u884c Instrumentation\r\nLlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)\r\n<\/code><\/pre>\n<ul>\n<li><code>LlamaIndexInstrumentor<\/code>\uff1a\u6765\u81ea\u00a0<code>openinference.instrumentation.llama_index<\/code>\u00a0\u7684\u7c7b\uff0c\u7528\u4e8e\u5bf9 Llama Index \u8fdb\u884c\u8ffd\u8e2a\u548c\u53ef\u89c2\u6d4b\u6027 instrumentation\u3002<\/li>\n<li><code>trace_sdk.TracerProvider()<\/code>\uff1a\u521d\u59cb\u5316\u4e00\u4e2a\u65b0\u7684 Tracer \u63d0\u4f9b\u7a0b\u5e8f\uff0c\u7528\u4e8e\u521b\u5efa\u548c\u7ba1\u7406\u8ffd\u8e2a\u6570\u636e\u3002<\/li>\n<li><code>SimpleSpanProcessor<\/code>\uff1a\u7528\u4e8e\u540c\u6b65\u5bfc\u51fa spans \u5e76\u5c06\u6570\u636e\u53d1\u9001\u5230\u540e\u7aef\u3002<\/li>\n<li><code>LlamaIndexInstrumentor().instrument(tracer_provider=tracer_provider)<\/code>\uff1a\u4e3a Llama Index \u5e94\u7528 instrumentation\uff0c\u5e76\u4f7f\u7528\u63d0\u4f9b\u7684 Tracer \u63d0\u4f9b\u7a0b\u5e8f\u8fdb\u884c\u8ffd\u8e2a\u3002<\/li>\n<\/ul>\n<h3>3.4 \u4f7f\u7528 OpenAI \u4e0e Llama Index \u4ea4\u4e92<\/h3>\n<p>\u8981\u4f7f\u7528 OpenAI \u6a21\u578b\u901a\u8fc7 Llama Index \u6267\u884c\u5b8c\u6210\u8bf7\u6c42\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u4ee3\u7801\uff1a<\/p>\n<pre><code>from llama_index.llms.openai import OpenAI\r\n# \u521d\u59cb\u5316 OpenAI \u6a21\u578b\r\nllm = OpenAI(model=\"gpt-4o-mini\")\r\n# \u53d1\u8d77\u5b8c\u6210\u8bf7\u6c42\r\nresp = llm.complete(\"Paul Graham is \")\r\n# \u6253\u5370\u54cd\u5e94\u7ed3\u679c\r\nprint(resp)\r\n<\/code><\/pre>\n<ul>\n<li><code>from llama_index.llms.openai import OpenAI<\/code>\uff1a\u4ece\u00a0<code>llama_index<\/code>\u00a0\u5305\u4e2d\u5bfc\u5165 OpenAI \u7c7b\uff0c\u4ee5\u5b9e\u73b0\u4e0e OpenAI \u6a21\u578b\u7684\u4ea4\u4e92\u3002<\/li>\n<li><code>OpenAI(model=\"gpt-4o-mini\")<\/code>\uff1a\u4f7f\u7528\u6307\u5b9a\u6a21\u578b\uff08\u5982 gpt-4\uff09\u521d\u59cb\u5316 OpenAI \u7c7b\u5b9e\u4f8b\u3002<\/li>\n<li><code>llm.complete(...)<\/code>\uff1a\u5411\u6a21\u578b\u53d1\u9001\u63d0\u793a\u6587\u672c\uff0c\u751f\u6210\u54cd\u5e94\u5185\u5bb9\u3002<\/li>\n<\/ul>\n<h3>3.5 \u4f7f\u7528 OpenAI \u4e0e Llama Index \u8fdb\u884c\u804a\u5929\u4ea4\u4e92<\/h3>\n<pre><code>from llama_index.llms.openai import OpenAI\r\nfrom llama_index.core.llms import ChatMessage\r\n# \u521d\u59cb\u5316 OpenAI \u6a21\u578b\r\nllm = OpenAI()\r\n# \u5b9a\u4e49\u804a\u5929\u6d88\u606f\r\nmessages = [\r\nChatMessage(\r\nrole=\"system\", content=\"You are a pirate with a colorful personality\"\r\n),\r\nChatMessage(role=\"user\", content=\"What is your name\"),\r\n]\r\n# \u83b7\u53d6\u6a21\u578b\u7684\u54cd\u5e94\u7ed3\u679c\r\nresp = llm.chat(messages)\r\n<\/code><\/pre>\n<ul>\n<li><code>OpenAI<\/code>\uff1a\u7528\u4e8e\u4e0e OpenAI \u6a21\u578b\u4ea4\u4e92\u7684\u7c7b\u3002<\/li>\n<li><code>ChatMessage<\/code>\uff1a\u7528\u4e8e\u683c\u5f0f\u5316\u804a\u5929\u6d88\u606f\u7684\u7c7b\u3002<\/li>\n<li><code>OpenAI()<\/code>\uff1a\u521d\u59cb\u5316 OpenAI \u7c7b\u5b9e\u4f8b\u3002<\/li>\n<li><code>ChatMessage<\/code>\uff1a\u521b\u5efa\u804a\u5929\u6d88\u606f\u5bf9\u8c61\uff0c\u6307\u5b9a\u89d2\u8272\uff08\u4f8b\u5982\uff0c\u201csystem\u201d\u3001\u201cuser\u201d\uff09\u548c\u6d88\u606f\u5185\u5bb9\u3002\n<ul>\n<li><code>role=\"system\"<\/code>\uff1a\u5b9a\u4e49\u7cfb\u7edf\u6d88\u606f\uff0c\u7528\u4e8e\u8bbe\u7f6e\u6a21\u578b\u7684\u4e0a\u4e0b\u6587\u6216\u4e2a\u6027\u3002<\/li>\n<li><code>role=\"user\"<\/code>\uff1a\u4ee3\u8868\u7528\u6237\u53d1\u9001\u7684\u6d88\u606f\u3002<\/li>\n<\/ul>\n<\/li>\n<li><code>llm.chat(messages)<\/code>\uff1a\u5c06\u5b9a\u4e49\u7684\u6d88\u606f\u53d1\u9001\u7ed9\u6a21\u578b\u5e76\u63a5\u6536\u54cd\u5e94\u7ed3\u679c\u3002<\/li>\n<\/ul>\n<p>\u6b64\u4ee3\u7801\u901a\u8fc7\u7cfb\u7edf\u548c\u7528\u6237\u6d88\u606f\u8bbe\u7f6e\u4e0e OpenAI \u6a21\u578b\u8fdb\u884c\u804a\u5929\u4ea4\u4e92\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>4. \u89c2\u5bdf RAG \u6d41\u7a0b<\/h2>\n<h3>4.1 \u8bbe\u7f6e\u89c2\u5bdf RAG \u6d41\u7a0b\u7684\u73af\u5883<\/h3>\n<pre><code>!pip install llama-index\r\n!pip install llama-index-vector-stores-qdrant\r\n!pip install llama-index-readers-file\r\n!pip install llama-index-embeddings-fastembed\r\n!pip install llama-index-llms-openai\r\n!pip install -U qdrant_client fastembed\r\n<\/code><\/pre>\n<ul>\n<li><code>llama-index<\/code>\uff1a\u7528\u4e8e Llama Index \u529f\u80fd\u7684\u6838\u5fc3\u5305\u3002<\/li>\n<li><code>llama-index-vector-stores-qdrant<\/code>\uff1a\u96c6\u6210 Qdrant \u4f5c\u4e3a Llama Index \u7684\u5411\u91cf\u5b58\u50a8\u3002<\/li>\n<li><code>llama-index-readers-file<\/code>\uff1a\u4e3a Llama Index \u63d0\u4f9b\u6587\u4ef6\u8bfb\u53d6\u80fd\u529b\u3002<\/li>\n<li><code>llama-index-embeddings-fastembed<\/code>\uff1a\u4e3a Llama Index \u63d0\u4f9b FastEmbed \u652f\u6301\uff0c\u7528\u4e8e\u751f\u6210\u5411\u91cf\u5d4c\u5165\u3002<\/li>\n<li><code>llama-index-llms-openai<\/code>\uff1a\u96c6\u6210 OpenAI \u6a21\u578b\u5230 Llama Index\u3002<\/li>\n<li><code>qdrant_client<\/code>\uff1a\u4e0e Qdrant \u4ea4\u4e92\u7684\u5ba2\u6237\u7aef\u5e93\uff0cQdrant \u662f\u4e00\u79cd\u5411\u91cf\u641c\u7d22\u5f15\u64ce\u3002<\/li>\n<li><code>fastembed<\/code>\uff1a\u7528\u4e8e\u5feb\u901f\u751f\u6210\u5d4c\u5165\u5411\u91cf\u7684\u5e93\u3002<\/li>\n<\/ul>\n<h3>4.2 \u4f7f\u7528\u5d4c\u5165\u548c\u6587\u6863\u7d22\u5f15\u51c6\u5907 RAG \u6d41\u7a0b<\/h3>\n<pre><code>from llama_index.core import VectorStoreIndex, SimpleDirectoryReader\r\nfrom llama_index.embeddings.fastembed import FastEmbedEmbedding\r\n# from llama_index.embeddings.openai import OpenAIEmbedding\r\nfrom llama_index.core.settings import Settings\r\nSettings.embed_model = FastEmbedEmbedding(model_name=\"BAAI\/bge-base-en-v1.5\")\r\n# Settings.embed_model = OpenAIEmbedding(embed_batch_size=10)\r\ndocuments = SimpleDirectoryReader(\"data\").load_data()\r\nindex = VectorStoreIndex.from_documents(documents)\r\n<\/code><\/pre>\n<ul>\n<li><code>VectorStoreIndex<\/code>\uff1a\u7528\u4e8e\u521b\u5efa\u548c\u7ba1\u7406\u5411\u91cf\u5b58\u50a8\u7d22\u5f15\u7684\u7c7b\u3002\u8be5\u7d22\u5f15\u57fa\u4e8e\u6587\u6863\u5411\u91cf\u8fdb\u884c\u9ad8\u6548\u7684\u76f8\u4f3c\u6027\u641c\u7d22\u548c\u68c0\u7d22\u3002<\/li>\n<li><code>SimpleDirectoryReader<\/code>\uff1a\u4ece\u6307\u5b9a\u76ee\u5f55\u8bfb\u53d6\u6587\u6863\u7684\u7c7b\uff0c\u9884\u5904\u7406\u52a0\u8f7d\u7684\u6587\u4ef6\u4ee5\u8fdb\u884c\u7d22\u5f15\u3002<\/li>\n<li><code>FastEmbedEmbedding<\/code>\uff1a\u4f7f\u7528 FastEmbed \u5e93\u751f\u6210\u6587\u672c\u5d4c\u5165\u5411\u91cf\u7684\u5d4c\u5165\u6a21\u578b\u7c7b\u3002\u6307\u5b9a\u6a21\u578b\u540d\u79f0\u4e3a\u00a0<code>\"BAAI\/bge-base-en-v1.5\"<\/code>\u3002<\/li>\n<li><code>from llama_index.embeddings.openai import OpenAIEmbedding<\/code>\uff1a\n<ul>\n<li><code>OpenAIEmbedding<\/code>\uff1a\u7528\u4e8e\u901a\u8fc7 OpenAI \u5d4c\u5165\u670d\u52a1\u751f\u6210\u5411\u91cf\u7684\u5d4c\u5165\u6a21\u578b\u7c7b\u3002\u9ed8\u8ba4\u88ab\u6ce8\u91ca\u6389\u3002\u5982\u679c\u5e0c\u671b\u4f7f\u7528 OpenAI \u6a21\u578b\u800c\u975e FastEmbed\uff0c\u53ef\u4ee5\u53d6\u6d88\u6ce8\u91ca\u5e76\u914d\u7f6e\u53c2\u6570\uff0c\u5982\u00a0<code>embed_batch_size<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n<li><code>Settings<\/code>\uff1a\u7528\u4e8e\u8bbe\u7f6e\u5168\u5c40\u5d4c\u5165\u6a21\u578b\u914d\u7f6e\u7684\u7c7b\u3002\u901a\u8fc7\u7ed9\u00a0<code>embed_model<\/code>\u00a0\u5c5e\u6027\u8d4b\u503c\uff0c\u6307\u5b9a\u4f7f\u7528\u7684\u5d4c\u5165\u6a21\u578b\u3002<\/li>\n<li><code>Settings.embed_model = FastEmbedEmbedding(model_name=\"BAAI\/bge-base-en-v1.5\")<\/code>\uff1a\u8bbe\u7f6e\u5168\u5c40\u4f7f\u7528\u00a0<code>FastEmbedEmbedding<\/code>\u00a0\u4f5c\u4e3a\u5d4c\u5165\u5411\u91cf\u6a21\u578b\u3002<\/li>\n<li><code>documents = SimpleDirectoryReader(\"data\").load_data()<\/code>\uff1a\u4ece\u76ee\u5f55\u00a0<code>\"data\"<\/code>\u00a0\u52a0\u8f7d\u548c\u9884\u5904\u7406\u6587\u6863\u6570\u636e\u3002\u786e\u4fdd\u76ee\u5f55\u540d\u6839\u636e\u9879\u76ee\u5b9e\u9645\u8def\u5f84\u8c03\u6574\u3002<\/li>\n<li><code>index = VectorStoreIndex.from_documents(documents)<\/code>\uff1a\u57fa\u4e8e\u9884\u5904\u7406\u7684\u6587\u6863\u521b\u5efa\u5411\u91cf\u5b58\u50a8\u7d22\u5f15\u3002\u8fd9\u4e00\u6b65\u5b9e\u73b0\u4e86\u6587\u6863\u7684\u5411\u91cf\u5316\u8868\u793a\u5e76\u5141\u8bb8\u57fa\u4e8e\u5411\u91cf\u8fdb\u884c\u67e5\u8be2\u3002<\/li>\n<\/ul>\n<h3>4.3 \u67e5\u8be2\u5411\u91cf\u5b58\u50a8\u7d22\u5f15<\/h3>\n<p>\u4e00\u65e6\u5411\u91cf\u5b58\u50a8\u7d22\u5f15\u8bbe\u7f6e\u5b8c\u6210\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u5b83\u8fdb\u884c\u67e5\u8be2\u5e76\u68c0\u7d22\u76f8\u5173\u4fe1\u606f\u3002<\/p>\n<pre><code>query_engine = index.as_query_engine()\r\nresponse = query_engine.query(\"What did the author do growing up?\")\r\nprint(response)\r\n<\/code><\/pre>\n<ul>\n<li><code>as_query_engine()<\/code>: \u5c06\u00a0<code>VectorStoreIndex<\/code>\u00a0\u8f6c\u6362\u4e3a\u67e5\u8be2\u5f15\u64ce\u3002\u8be5\u5f15\u64ce\u5141\u8bb8\u60a8\u57fa\u4e8e\u5b58\u50a8\u5728\u7d22\u5f15\u4e2d\u7684\u6587\u6863\u5411\u91cf\u8868\u793a\u6267\u884c\u641c\u7d22\u548c\u68c0\u7d22\u4fe1\u606f\u3002<\/li>\n<li><code>query()<\/code>: \u5728\u5411\u91cf\u5b58\u50a8\u7d22\u5f15\u4e0a\u6267\u884c\u67e5\u8be2\u3002\u67e5\u8be2\u5b57\u7b26\u4e32 &#8220;What did the author do growing up?&#8221; \u7528\u4e8e\u641c\u7d22\u76f8\u5173\u6587\u6863\u5e76\u57fa\u4e8e\u5411\u91cf\u5d4c\u5165\u63d0\u4f9b\u7684\u4e0a\u4e0b\u6587\u68c0\u7d22\u4fe1\u606f\u3002<\/li>\n<\/ul>\n<p>\u6700\u540e\uff0c<code>response<\/code>\u00a0\u5305\u542b\u4ece\u5411\u91cf\u5b58\u50a8\u7d22\u5f15\u4e2d\u68c0\u7d22\u7684\u4fe1\u606f\uff0c\u8fd9\u4e9b\u4fe1\u606f\u57fa\u4e8e\u67e5\u8be2\u548c\u7d22\u5f15\u6587\u6863\u751f\u6210\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u7ed3\u8bba<\/h2>\n<p>\u5728\u672c\u6307\u5357\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528 Llama Index \u8bbe\u7f6e\u4e86\u4e00\u4e2a\u68c0\u7d22\u589e\u5f3a\u751f\u6210\uff08RAG\uff09\u6d41\u7a0b\uff0c\u5e76\u5c06\u5176\u4e0e\u5404\u79cd\u7ec4\u4ef6\u96c6\u6210\u4ee5\u89c2\u5bdf\u5176\u529f\u80fd\u3002\u6211\u4eec\u9996\u5148\u914d\u7f6e\u548c\u5b89\u88c5\u4e86\u6240\u9700\u7684\u5e93\uff0c\u5305\u62ec Llama Index\u3001OpenTelemetry \u548c\u5404\u79cd\u5d4c\u5165\u6a21\u578b\u3002<\/p>\n<p>\u6211\u4eec\u63a5\u4e0b\u6765\u8fdb\u884c\u4e86\u4ee5\u4e0b\u64cd\u4f5c\uff1a<\/p>\n<ul>\n<li>\u521d\u59cb\u5316\u5e76\u914d\u7f6e\u5d4c\u5165\u6a21\u578b\uff0c\u5fc5\u8981\u65f6\u4f7f\u7528 FastEmbed \u6216 OpenAI \u6a21\u578b\u3002<\/li>\n<li>\u52a0\u8f7d\u5e76\u7d22\u5f15\u6765\u81ea\u76ee\u5f55\u7684\u6587\u6863\uff0c\u4ee5\u51c6\u5907\u6570\u636e\u8fdb\u884c\u67e5\u8be2\u3002<\/li>\n<li>\u8bbe\u7f6e\u67e5\u8be2\u5f15\u64ce\uff0c\u4ee5\u4fbf\u6267\u884c\u641c\u7d22\u5e76\u57fa\u4e8e\u7d22\u5f15\u6587\u6863\u68c0\u7d22\u76f8\u5173\u4fe1\u606f\u3002<\/li>\n<\/ul>\n<p>\u901a\u8fc7\u9075\u5faa\u8fd9\u4e9b\u6b65\u9aa4\uff0c\u60a8\u5df2\u6210\u529f\u51c6\u5907\u597d\u4e00\u4e2a\u80fd\u591f\u9ad8\u6548\u6587\u6863\u68c0\u7d22\u548c\u67e5\u8be2\u5904\u7406\u7684 RAG \u6d41\u7a0b\u3002\u8be5\u8bbe\u7f6e\u5229\u7528\u57fa\u4e8e\u5411\u91cf\u7684\u5d4c\u5165\u548c\u7d22\u5f15\uff0c\u63d0\u4f9b\u4e86\u5148\u8fdb\u7684\u641c\u7d22\u548c\u4fe1\u606f\u68c0\u7d22\u529f\u80fd\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u968f\u610f\u5c1d\u8bd5\u4e0d\u540c\u7684\u914d\u7f6e\u548c\u67e5\u8be2\uff0c\u4ee5\u8fdb\u4e00\u6b65\u63a2\u7d22 RAG \u6d41\u7a0b\u7684\u529f\u80fd\u3002\u5982\u6709\u4efb\u4f55\u95ee\u9898\u6216\u9700\u8981\u8fdb\u4e00\u6b65\u5b9a\u5236\uff0c\u8bf7\u67e5\u9605\u6240\u4f7f\u7528\u5e93\u7684\u6587\u6863\u6216\u83b7\u53d6\u66f4\u591a\u6307\u5bfc\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6b22\u8fce\u6765\u5230\u672c\u7b14\u8bb0\u672c\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u5c06\u63a2\u7d22\u5982\u4f55\u4f7f\u7528 Llama Index \u8bbe\u7f6e\u548c\u89c2\u5bdf\u68c0\u7d22\u589e\u5f3a\u751f\u6210 (RAG) \u6d41\u6c34\u7ebf\u3002 https:\/\/github.com\/adithya-s-k\/AI-Engineering.academy\/tree\/main&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[],"class_list":["post-14921","post","type-post","status-publish","format-standard","hentry","category-knowledge"],"_links":{"self":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/posts\/14921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/comments?post=14921"}],"version-history":[{"count":0,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/posts\/14921\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/media?parent=14921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/categories?post=14921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kdjingpai.com\/ja\/wp-json\/wp\/v2\/tags?post=14921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}